2010-10-19 18:17:26 +02:00
|
|
|
// slightly modified version of echo-server.js for the web-sockets demo
|
|
|
|
|
|
|
|
var sys = require("sys")
|
|
|
|
, fs = require("fs")
|
|
|
|
, path = require("path")
|
|
|
|
, http = require("http")
|
2010-10-19 21:07:30 +02:00
|
|
|
, ws = require(__dirname + '/node-websocket-server/lib/ws');
|
2010-10-19 18:17:26 +02:00
|
|
|
|
|
|
|
/*-----------------------------------------------
|
|
|
|
logging:
|
|
|
|
-----------------------------------------------*/
|
|
|
|
var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
|
|
|
|
|
|
|
|
function pad(n) {
|
|
|
|
return n < 10 ? '0' + n.toString(10) : n.toString(10);
|
|
|
|
}
|
|
|
|
|
|
|
|
function timestamp() {
|
|
|
|
var d = new Date();
|
|
|
|
return [
|
|
|
|
d.getDate(),
|
|
|
|
months[d.getMonth()],
|
|
|
|
[ pad(d.getHours())
|
|
|
|
, pad(d.getMinutes())
|
|
|
|
, pad(d.getSeconds())
|
|
|
|
, (d.getTime() + "").substr( - 4, 4)
|
|
|
|
].join(':')
|
|
|
|
].join(' ');
|
|
|
|
};
|
|
|
|
|
|
|
|
function log(msg) {
|
|
|
|
sys.puts(timestamp() + ' - ' + msg.toString());
|
|
|
|
};
|
|
|
|
|
|
|
|
function serveFile(req, res){
|
|
|
|
if( req.url.indexOf("favicon") > -1 ){
|
|
|
|
log("HTTP: inbound request, served nothing, (favicon)");
|
|
|
|
|
|
|
|
res.writeHead(200, {'Content-Type': 'image/x-icon'});
|
|
|
|
res.end("");
|
|
|
|
} else {
|
|
|
|
log("HTTP: inbound request, served client.html");
|
|
|
|
|
|
|
|
res.writeHead(200, {'Content-Type': 'text/html'});
|
|
|
|
fs.createReadStream( path.normalize(path.join(__dirname, "client.html")), {
|
|
|
|
'flags': 'r',
|
|
|
|
'encoding': 'binary',
|
|
|
|
'mode': 0666,
|
|
|
|
'bufferSize': 4 * 1024
|
|
|
|
}).addListener("data", function(chunk){
|
|
|
|
res.write(chunk, 'binary');
|
|
|
|
}).addListener("close",function() {
|
|
|
|
res.end();
|
|
|
|
});
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
/*-----------------------------------------------
|
|
|
|
Spin up our server:
|
|
|
|
-----------------------------------------------*/
|
|
|
|
var httpServer = http.createServer(serveFile);
|
|
|
|
|
|
|
|
|
|
|
|
var connected = 0;
|
|
|
|
var server = ws.createServer({
|
|
|
|
debug: true
|
|
|
|
}, httpServer);
|
|
|
|
|
|
|
|
server.addListener("listening", function(){
|
|
|
|
log("Listening for connections on " + process.ARGV[2]);
|
|
|
|
});
|
|
|
|
|
|
|
|
// Handle WebSocket Requests
|
|
|
|
server.addListener("connection", function(conn){
|
|
|
|
log("opened connection: "+conn.id);
|
|
|
|
|
|
|
|
connected++;
|
|
|
|
server.send(conn.id, connected+'');
|
|
|
|
conn.broadcast(connected+'');
|
|
|
|
|
|
|
|
conn.addListener("message", function(message){
|
|
|
|
log("<"+conn.id+"> "+message);
|
|
|
|
conn.broadcast(message);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
server.addListener("close", function(conn){
|
|
|
|
log("closed connection: "+conn.id);
|
|
|
|
connected--;
|
|
|
|
conn.broadcast(connected+'');
|
|
|
|
});
|
|
|
|
|
|
|
|
server.listen(parseInt(process.ARGV[2]) || 8000);
|
|
|
|
// Handle HTTP Requests:
|
|
|
|
|
|
|
|
// This will hijack the http server, if the httpserver doesn't
|
|
|
|
// already respond to http.Server#request
|
|
|
|
|
|
|
|
// server.addListener("request", serveFile);
|