console.log("Starting server..."); //config and variables var serverPort = 8080; var connectCounter = 0; var adminSessions = []; var updater_msDelay = 1000 * 60; var updater_dailymotionID = "x1ulpje"; //libs var io = require("socket.io")(serverPort); var mysql = require("mysql"); var http = require("http"); var https = require("https"); var memcached = require("memcached"); var phpunserialize = require("php-unserialize"); var cookie = require("cookie"); var util = require('util'); var sessions = new memcached("localhost:11211"); sessions.on('failure', function(details) { console.log("Error while connecting to PHP sessions manager. error: " + details); return -1; }); //events var Manager = new ClientEventsManager(io); console.log("Server started"); process.on('exit', function(code) { console.log("Server shutting down with code " + code + "..."); db.destroy(); sessions.end(); }); /******************************************************************************/ //functions function getJSON(options, onResult) { var prot = options.port == 443 ? https : http; var req = prot.request(options, function(res) { var output = ''; res.setEncoding('utf8'); res.on('data', function(chunk) { output += chunk; }); res.on('end', function() { try { var obj = JSON.parse(output); onResult(res.statusCode, obj); } catch (e) { console.log("Invalid response returned from "+options.host+options.path+":"+options.port+":\n"+output); } }); }); req.on('error', function(err) { console.log("Error in http request to " + options.host + " : " + err); }); req.end(); } function isAuthentified(socket, Yep, Nope) { console.log("Trying to retrieve data..."); socket.send("Your PHP session id: "+Manager.clients[socket.id].PHPSESSID+", right?"); sessions.get(Manager.clients[socket.id].PHPSESSID, function(err, data) { if (err) { console.log("err"); Nope(); } if (data) { console.log("data OK"); var SessionData = PHPunserialize.unserializeSession(data); console.log(util.inspect(SessionData, null)); if (SessionData.authentified) { console.log("auth ok"); Yep(); } else { console.log("no auth"); Nope(); } } else { console.log("data not ok: "+data); Nope(); } }); } /******************************************************************************/ //classes function ClientEventsManager() { var EventsManager = this; this.clients = []; this.clientsCount = 0; this.onClientConnection = function(socket) { var PHPSESSID = cookie.parse(socket.request.headers.cookie).PHPSESSID; socket.emit("info", PHPSESSID); EventsManager.clientsCount++; EventsManager.clients[socket.id] = {}; EventsManager.clients[socket.id].PHPSESSID = PHPSESSID; isAuthentified(socket, function() { socket.emit("authentified", true); }, function() { socket.emit("authentified", false); }); }; this.onClientDisconnection = function(socket) { delete EventsManager.clients[socket.id]; EventsManager.clientsCount--; //remove the client from the sendConnectedClientsOnUpdate array (if he is in) if (EventsManager.sendConnectedClientsOnUpdate.indexOf(socket) > -1) { EventsManager.sendConnectedClientsOnUpdate.splice(EventsManager.sendConnectedClientsOnUpdate.indexOf(socket), 1); } }; this.createEventReceivers = function() { io.sockets.on('connection', function(socket) { EventsManager.onClientConnection(socket); socket.on('disconnect', function() { EventsManager.onClientDisconnection(socket); }); }); }; this.createEventReceivers(); }