• 21-11-2012, 16:49:06
    #1
    Demo : http://goo.gl/6kvuf
    Down : http://www.mediafire.com/?yst7xorshdrjx8g

    Kullanılan kütüphaneler socket.io , jade , express
    clientside kütüphaneler jquery + colorpicker

    Db gerektirmez

    app.js dosyası :

    var express = require('express');
    var crypto = require('crypto');
    var app = module.exports = express.createServer();
    
    // <Ayar>
    var adminler = {"admin":"admin","r10":"r10"};
    var rooms = ["Genel","Facebook","Aşk","Felsefe","Üniversiteliler","15+","25+","40+","Spor","Gündem","Islam","Programlama","Counter-Strike","Private"];
    var ozelodalar = {"Private":{}};
    var onlinesayisi=0; 
    var privatepassword="~|~";
    var banlilar={};
    var renktest = /^(#)?([0-9a-fA-F]{3})([0-9a-fA-F]{3})?$/;
    //var iptest = /^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/;
    var gizlikey="1jb3h65787n6mnsdjaknm2k1n4";
    var nicktest=/[^a-z-0-9çışğüö_\-\:]/gi;
    var kullanilacak_port = process.env.PORT || 8080;
    //var kullanilacak_port = 8080;
    // </Ayar>
    
    app.configure(function(){
      app.set('views', __dirname + '/views');
      app.set('view engine', 'jade');
      app.set('view options', { pretty: true });
      app.use(express.bodyParser());
      app.use(express.methodOverride());
      app.use(app.router);
      app.use(express.static(__dirname + '/public'));
    });
    
    
    app.configure('development', function(){
      app.use(express.errorHandler({ dumpExceptions: true, showStack: true })); 
    });
    
    app.configure('production', function(){
      app.use(express.errorHandler()); 
    });
    
    
    function explode(delimiter,string,limit){if(arguments.length<2||typeof delimiter=='undefined'||typeof string=='undefined')return null;if(delimiter===''||delimiter===false||delimiter===null)return false;if(typeof delimiter=='function'||typeof delimiter=='object'||typeof string=='function'||typeof string=='object'){return{0:''};}if(delimiter===true)delimiter='1';delimiter+='';string+='';var s=string.split(delimiter);if(typeof limit==='undefined')return s;if(limit===0)limit=1;if(limit>0){if(limit>=s.length)return s;return s.slice(0,limit-1).concat([s.slice(limit-1).join(delimiter)]);}if(-limit>=s.length)return[];s.splice(s.length+limit);return s;}
    
    function encrypt(text){
      var cipher = crypto.createCipher('aes-256-cbc',gizlikey)
      var crypted = cipher.update(text,'utf8','hex')
      crypted += cipher.final('hex');
      return crypted;
    }
    
    function decrypt(text){
      var decipher = crypto.createDecipher('aes-256-cbc',gizlikey)
      var dec = decipher.update(text,'hex','utf8')
      dec += decipher.final('utf8');
      return dec;
    }
    
    app.get('/', function(req, res){
      res.render('chat',  { layout:false,title: 'Hemen Arkadasliklar Edin',online:onlinesayisi,odalar:rooms})
    });
    
    app.listen(kullanilacak_port);
    
    console.log("Express server listening on port %d in %s mode", app.address().port, app.settings.env);
    
    // Socket bağlantısı kurulur
    var io = require('socket.io').listen(app, { log: false });
    
    // Kullanıcı Listesinin tutulacağı Object
    var kullanicilar = {};
    var kucuknickler = {};
    
    
    io.configure(function () { 
      io.set("transports", ["xhr-polling"]); 
      io.set("polling duration", 10); 
    });
    
    // Bağlantı kurulduğunda çalışacak kısım
    io.sockets.on('connection', function(socket){
    
    
      
    
        // Kullanıcı Ekleme Fonksiyonu
        socket.on("kullaniciEkle", function(kullaniciadi,oda){
    
    
    
        if((kullaniciadi.search(/[a-z]/i) === -1) || (kullaniciadi.length<3))  {
    
        kullaniciadi="nicksiz"+Math.floor(Math.random() * 9999999);
    
        }
    
            // Kullanıcı session'nda bilgileri saklıyoruz
    		if(!rooms[oda]){oda=0;}
            girisyap = 1;
    		//ipz=decrypt(ipz);
    		ipz=socket.handshake.headers['x-forwarded-for'] || socket.handshake.address.address;
          if (ozelodalar[rooms[oda]]) {
    
            if (kullaniciadi.indexOf(privatepassword)>-1) {
    
              kullaniciadi=kullaniciadi.replace(privatepassword, "");
              girisyap=1;
    
            }else {
              socket.emit("uyari", "Bu odaya girmek için yetkiniz yok");
              girisyap=0;
              socket.emit("kopgit");
            }
          }
    
    
            if(adminler[kullaniciadi])
            {
              socket.emit("uyari", "Bu Nick Adminler Tarafindan Kullanılıyor.");
              girisyap=0;
    		  socket.emit("kopgit");
            }
    		
    		/*
    		if(!iptest.test(ipz))
            {
              socket.emit("uyari", "Çakalmısın olm sen?.");
              girisyap=0;
    		  socket.emit("kopgit");
            }
    		*/
    		
            if(kullaniciadi.indexOf(':')>-1)
            {
              verikul=explode(':',kullaniciadi,2);
              kullaniciadi=verikul[0];
              sifre=verikul[1];
              if(adminler[kullaniciadi]!=sifre) 
              { 
               socket.emit("uyari", "Şifre Yanlış.");
               girisyap=0;
    		   socket.emit("kopgit");
              } 
              else if(kullanicilar[kullaniciadi])
              { 
                socket.emit("uyari", "Admin zaten şuan giriş yapmış.");
                girisyap=0;
    			socket.emit("kopgit");
              }
    
              else
              {
                girisyap=1;
              }
            }
    		kullaniciadi = kullaniciadi.replace(nicktest, "");
            socket.kullaniciAdi = kullaniciadi;
            socket.userId = Object.keys(kullanicilar).length;
    		socket.room=oda;
            
          if(banlilar[ipz])
          {
            socket.emit("uzaklas","");
            girisyap = 0;
          }
    
    		if(!kucuknickler[kullaniciadi.toLowerCase()] && girisyap)
            {
    		kucuknickler[kullaniciadi.toLowerCase()] = {nick:kullaniciadi.toLowerCase(),ip:encrypt(ipz)};
            // Array'e kullanıcı bilgilerini ekliyoruz
            kullanicilar[kullaniciadi] = {
                userName : kullaniciadi,
                userId : Object.keys(kullanicilar).length,
                room : oda,
                socketid : encrypt(socket.id)
            };
    		
    		//odaya sokuyoruz
    		socket.join(oda);
    		
            // Bağlanan kullanıcıya hoşgeldin mesajı yolluyoruz
            socket.emit("mesajGonder", "Sistem", rooms[oda] + " Kanalına Hoşgeldiniz.",'000000',0);
    
            // Bütün kullanıcılara yeni kullanıcı bağlandı mesajı yolluyoruz
    
            socket.broadcast.to(oda).emit("mesajGonder", "<font color='#006400'>Sistem</font>", kullaniciadi + " sohbete bağlandı. (y)",'000000',0);
            // Bağlı kullanıcılarda Kullanıcı listesini yeniliyoruz
            //io.sockets.emit("kullanicilariYenile", kullanicilar,Object.keys(kullanicilar).length);
    		io.sockets.in(oda).emit("kullanicilariYenile", kullanicilar,io.sockets.clients(oda).length);
    		onlinesayisi=Object.keys(kullanicilar).length;
            socket.emit("girisyap", "");
          }
          else
          {
            if(girisyap)
            {
            socket.emit("uyari", "Bu  Nick kullanılıyor lütfen başka nick seçin.");
    		socket.emit("kopgit");
            }
          }
        });
    
        // Bağlantı kesildiği takdirde çalışacak fonksiyon.
        socket.on("disconnect", function(){
    		try {
    		if(socket.id==decrypt(kullanicilar[socket.kullaniciAdi]["socketid"]))
    		{
        delete kullanicilar[socket.kullaniciAdi];
    		delete kucuknickler[socket.kullaniciAdi.toLowerCase()];
    		io.sockets.in(socket.room).emit("kullanicilariYenile", kullanicilar,io.sockets.clients(socket.room).length);
    		onlinesayisi=Object.keys(kullanicilar).length;
    		socket.leave(socket.room);
            if(socket.kullaniciAdi)
            {
            socket.broadcast.to(socket.room).emit("mesajGonder", "<font color='#b22222'>Sistem</font>", socket.kullaniciAdi + " sohbetten ayrıldı (n)",'000000',0);
            }
    		}
    		} catch(e){}
        });
    
    
        socket.on("mesajYolla", function(data,renk){
    		if(!renktest.test(renk)){renk='000000';}
            if(data.length>400 || data.length <1)
            {
              socket.emit("uyari", "Mesaj 400 karakteri geçemez veya boş olamaz!");
            }
            else
            {
    		//ozel mesaj
            if(data.indexOf(':')>-1)
            {
              veri=explode(':',data,2);
              if(kullanicilar[veri[0]])
              {
                kime=veri[0];
                mesaj=veri[1];
                io.sockets.socket(decrypt(kullanicilar[kime].socketid)).emit("mesajGonder",[socket.kullaniciAdi,kime],mesaj,renk,1,1);
    			io.sockets.socket(socket.id).emit("mesajGonder",[socket.kullaniciAdi,kime],mesaj,renk,1,0);
              }
    
    
            else
            { 
    		  if(adminler[socket.kullaniciAdi]) {
              io.sockets.in(socket.room).emit("mesajGonder", socket.kullaniciAdi, data,renk,0,1);
    		  }
    		  else
    		  {
    		  io.sockets.in(socket.room).emit("mesajGonder", socket.kullaniciAdi, data,renk,0,0);
    		  }
            }
    
            }
    
    
            else if(data.indexOf('/kick ')=='0' && adminler[socket.kullaniciAdi])
              {
                kim=data.split('/kick ')[1];
                if(kullanicilar[kim] && !adminler[kim])
                {
               socket.broadcast.to(socket.room).emit("mesajGonder", "Sistem", kim + " uzaklaştırıldı (n)",'000000',0,0);
               io.sockets.socket(decrypt(kullanicilar[kim].socketid)).emit("uzaklas","");
               delete kullanicilar[kim];
    		   delete kucuknickler[kim.toLowerCase()];
    		   io.sockets.in(socket.room).emit("kullanicilariYenile", kullanicilar,io.sockets.clients(socket.room).length);
    		   onlinesayisi=Object.keys(kullanicilar).length;
              }
    		  else
    		  {
    		 io.sockets.socket(decrypt(kullanicilar[kim].socketid)).emit("mesajGonder",["Sistem",kim],socket.kullaniciAdi+" seni atmaya calisti ayik ol",renk,1,0);
    		  }
    		  
    		  
            }
    		
    		     else if(data.indexOf('/adminkick ')=='0' && adminler[socket.kullaniciAdi])
              {
                kim=data.split('/adminkick ')[1];
                if(kullanicilar[kim] && kim!="root")
                {
               socket.broadcast.to(socket.room).emit("mesajGonder", "Sistem", kim + " uzaklaştırıldı (n)",'000000',0,0);
               io.sockets.socket(decrypt(kullanicilar[kim].socketid)).emit("uzaklas","");
               delete kullanicilar[kim];
    		   delete kucuknickler[kim.toLowerCase()];
    		   io.sockets.in(socket.room).emit("kullanicilariYenile", kullanicilar,io.sockets.clients(socket.room).length);
    		   onlinesayisi=Object.keys(kullanicilar).length;
              }
            }
    		
    		
    
            else if(data.indexOf('/ban ')=='0' && adminler[socket.kullaniciAdi])
              {
                kim=data.split('/ban ')[1];
                if(kullanicilar[kim] && !adminler[kim])
                {
                banlilar[decrypt(kucuknickler[kim.toLowerCase()].ip)]={"ip" : decrypt(kucuknickler[kim.toLowerCase()].ip)};
               socket.emit("mesajGonder","Sistem", kim+" ipsi : "+decrypt(kucuknickler[kim.toLowerCase()].ip),'000000',0,0);
               socket.broadcast.to(socket.room).emit("mesajGonder", "Sistem", kim + " banlandı (n)",'000000',0,0);
               io.sockets.socket(decrypt(kullanicilar[kim].socketid)).emit("uzaklas","");
               delete kullanicilar[kim];
    		   delete kucuknickler[kim.toLowerCase()];
               io.sockets.in(socket.room).emit("kullanicilariYenile", kullanicilar,io.sockets.clients(socket.room).length);
               onlinesayisi=Object.keys(kullanicilar).length;          
              }
            }
    	
    		 
    
              else if(data.indexOf('/unban ')=='0' && adminler[socket.kullaniciAdi])
              {
                kim=data.split('/unban ')[1];
                if(banlilar[kim])
                {
               delete banlilar[kim];
               socket.emit("mesajGonder","Sistem", kim+" ipsinin bani kalkti.",'000000',0,0);
              }
            }
            else	
            {
    		if(adminler[socket.kullaniciAdi]) {
              io.sockets.in(socket.room).emit("mesajGonder", socket.kullaniciAdi, data,renk,0,1);
    		  }
    		  else
    		  {
    		  io.sockets.in(socket.room).emit("mesajGonder", socket.kullaniciAdi, data,renk,0,0);
    		  }
            }
            }
        });
    });
  • 21-11-2012, 18:33:00
    #2
    Üyeliği durduruldu
    serverde gereksiz kodlar gözüme çarpıyor. expressi down etmek yerine express modülünü çekerek kullansan hazır appla jadeyle rot vs kod parçacıklarını bulundurmana gerek kalmaz.
  • 21-11-2012, 19:28:55
    #3
    phpClass adlı üyeden alıntı: mesajı görüntüle
    serverde gereksiz kodlar gözüme çarpıyor. expressi down etmek yerine express modülünü çekerek kullansan hazır appla jadeyle rot vs kod parçacıklarını bulundurmana gerek kalmaz.
    gereksiz kısım neresi ?
  • 21-11-2012, 20:26:03
    #4
    Üyeliği durduruldu
    Tontonq adlı üyeden alıntı: mesajı görüntüle
    gereksiz kısım neresi ?
    iletimde fazlalıklar yazıyor tekrarlamak gerekirse bu proje için expressin tamamını dahil etmek kütüphaneye yük bindirmek olmuş ki zaten bu uygulama yusufun hazırladığı chat uygulamasına güzel özellikler eklenmiş hali tabi oda yurt dışı kaynaklardan alıp editlediği bir proje bizim konumuz o değil tabikide ancak biri çıkıpta aga bu kod satırları nedir diye incelememiş sanırım. bir chat projesi için expressin tüm kütüphanelerini dahil etmek amatörlüğe kaçmış gördüğüm proje için express d yeterli ve uygun olurdu yinede son kullanıcısı için iyi bir uygulama
  • 21-11-2012, 20:37:17
    #5
    phpClass adlı üyeden alıntı: mesajı görüntüle
    iletimde fazlalıklar yazıyor tekrarlamak gerekirse bu proje için expressin tamamını dahil etmek kütüphaneye yük bindirmek olmuş ki zaten bu uygulama yusufun hazırladığı chat uygulamasına güzel özellikler eklenmiş hali tabi oda yurt dışı kaynaklardan alıp editlediği bir proje bizim konumuz o değil tabikide ancak biri çıkıpta aga bu kod satırları nedir diye incelememiş sanırım. bir chat projesi için expressin tüm kütüphanelerini dahil etmek amatörlüğe kaçmış gördüğüm proje için express d yeterli ve uygun olurdu yinede son kullanıcısı için iyi bir uygulama
    anladığım kadarıyla söylüyorum
    var express = require('express');
    yerine
    express.
    kullanılan yerlerde misal
    app.use(express.bodyParser());
    yerine
    app.use(require('express').bodyParser());
    mi kullanmalıyım böylesi daha kasıntı olmaz mı ?
    zaten kodlar 1 seferliğine derleniyor process kapanmıyor ki

    http://expressjs.com/api.html deki bütün örneklerin başı
    var express = require('express');
  • 21-11-2012, 20:57:47
    #6
    Üyeliği durduruldu
    Tontonq;

    var express = require('express'); sana sadece proje içerisinde express modülerini kullanabileceğini belirtir.

    senin down esnasında express i çekmek yerine express -d yi alman arasındaki fark şudur;
    express dediğin anda projene hazır app gelir ve içerisinde expressin tüm kütüphaneli dahil olur bunu yapmak yerine express -d ile sadece modülleri çekersin ancak app.js oluşmaz o imkanı sana verir ne ihtiyacın varsa onu kullanırsın bahsi geçen projede bunun yerine express alınmış araştırılmadan üzerinden geçilmiş.

    mesela atıyorum portunu değişkene attırmışsın bunun konfigurasyon içerisinde otomatik dahil olmasını sağlayabilirsin yada şunu ele alalım dosya açılışında var app = module.exports = express.createServer(); ile modülü tekrar export etmene gerek yoktu aslında connection.connect(); gibi bir işlemle aynı noktaya varılabilir.

    sana yazmamdaki amaç son kullanıcılar değil onlar için bu uygulama bulunmaz elmas durumunda sen madem ki böyle bir uygulama içerisindesin bağımsız ve doğru atışlarla proje çıkarmanı dilerim.
  • 21-11-2012, 21:16:19
    #7
    boş dizinde express komutunu kullandığında hazır boş bir proje veriyor hatta o verdiği proje bile jade kurulu olmadığından çalışmıyor yani şart değil hızlı başlangıç yapmak isteyenler için ideal

    misal şurda gösterdiğim örnek ne kadar sade expressjs nin hazır sunduğu template bunun için ne kadar gereksiz
    https://www.r10.net/php/870390-php-de...istekleri.html
  • 22-11-2012, 00:07:14
    #8
    Üyeliği durduruldu
    Tontong bu projede expressi neden kullandığını söylersen sana cevap verebilirim
  • 22-11-2012, 00:49:09
    #9
    phpClass adlı üyeden alıntı: mesajı görüntüle
    Tontong bu projede expressi neden kullandığını söylersen sana cevap verebilirim
    frontend olarak
    socket.io yu neye bind edecektim
    ya direk http.createServer ile yapacaktım

    niye taktın ki express e bu kadar anlamadım

    http://www.google.com.tr/search?clie...hannel=suggest

    hepi topu kaç framework var ki

    framework kullanmak mı kötü