Skip to content

Instantly share code, notes, and snippets.

@papachan
Created December 19, 2012 04:08
Show Gist options
  • Save papachan/4334326 to your computer and use it in GitHub Desktop.
Save papachan/4334326 to your computer and use it in GitHub Desktop.
var express = require('express'),
path = require('path'),
http = require('http'),
redis = require('redis'),
path = require('path'),
url = require('url');
function contains(arr,obj) {
return (arr.indexOf(obj) != -1);
}
var db = redis.createClient();
db.auth('', function() {
console.log('Redis client connected');
});
db.on("error", function (err) {
console.log("Error " + err);
});
var multi = db.multi();
var app = express();
app.configure(function(){
app.set('port', 8080);
app.use(express.favicon());
app.use('/img', express.static(path.join(__dirname, path.join('..','public/img/'))));
});
app.configure('development', function(){
app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});
app.get('/', function(req, res){
res.sendfile(path.join(__dirname, path.join('..','public/index.html')));
console.log("user: " + req.param("user"));
if(req.param("user") !== null){
var user = req.param("user");
db.lrange('online', 0, -1, function(err,list){
if(err) throw err;
console.log(list.toString());
if(list && !contains(list, user)){
db.lpush('online',user);
}
});
multi.exec(function(err,res){
if(err) throw err;
db.llen('online', function(err,len){
console.log(len + ' users online');
});
});
}
});
var server = http.createServer(app).listen(app.get('port'), function(){
console.log("Server listening on port %d in %s mode", app.get('port'), app.settings.env);
});
var sessionsConnections = {};
var io = require('socket.io').listen(server);
io.set('log level',1);
io.on('connection', function (socket) {
var sid = socket.id;
sessionsConnections[sid] = {};
var userlist = '';
db.lrange('online', 0, -1, function(err,list){
if(err) throw err;
socket.emit('onList', { msg: list.toString() });
});
socket.on('pong', function (data) {
if(!data.user) throw "no user";
var user = data.user;
sessionsConnections[sid].user = user;
db.lrange('online', 0, -1, function(err,list){
if(err) throw err;
if(list && !contains(list, user)){
db.lpush('online',user, function(){
db.lrange('online', 0, -1, function(err,list){
if(err) throw err;
socket.broadcast.emit('onList', { msg: list.toString() });
});
});
}
});
});
socket.on('disconnect', function() {
console.log('client disconnect', sessionsConnections[sid].user);
if(sessionsConnections[sid].user !== null){
db.lrem('online', 0, sessionsConnections[sid].user);
db.llen('online', function(err,len){
console.log(len + ' users online');
});
}
});
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment