Created
December 19, 2012 04:08
-
-
Save papachan/4334326 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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