Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * APP.JS
- *
- * Notice that AppFog passes the listen port for your app in an environment variable,
- * accessed by process.env.VCAP_APP_PORT
- *
- *
- */
- //REQUIREMENTS
- var
- express = require("express"),
- logger = require("morgan"),
- WebSocketServer = require("ws").Server;
- //MASTER VARIABLE DEFINITIONS
- var
- httpPort = process.env.PORT || 3000,
- wsPort = 3001,
- wss = new WebSocketServer({port:wsPort}),
- wsgrid = {},
- app = express();
- //SHORT FUNCTION DEFINITIONS
- var
- //Handle incoming messages from clients
- wsHandleMessage = function(rawMessage) {
- var
- messageArray = rawMessage.split(":"),
- messageType = messageArray[0],
- message = messageArray[1];
- switch(messageType){
- case "broadcast":
- var originClientID = messageArray[2];
- for(var wsid in wsgrid){ //broadcast to every client
- safeSend(wsid,rawMessage);
- }
- break;
- }
- },
- //Safely send a message to a client
- safeSend = function(wsid,msg){
- var ts = new Date().getTime();
- console.log(ts,wsid,msg);
- if(wsgrid[wsid].readyState == wsgrid[wsid].OPEN){ wsgrid[wsid].send(msg); }
- },
- //Safely close a client websocket connection
- closeSocket = function(wsid){delete wsgrid[wsid];},
- //Generate a unique client handle
- generateUIDNotMoreThan1million = function() { return ("0000" + (Math.random()*Math.pow(36,4) << 0).toString(36)).slice(-4); },
- //create the heartbeat function with access to local variables
- hb = function(wsid){
- if(wsgrid[wsid].readyState != wsgrid[wsid].OPEN){
- closeSocket(wsid);
- console.log("WS "+wsid+" has disconnected.");
- return;
- }
- safeSend(wsid,"hb");
- setTimeout(function(){hb(wsid);},5000);
- };
- //LISEN UP SERVER!
- //Create a websocket server
- wss.on('connection', function(ws) {
- var wsid = generateUIDNotMoreThan1million(); //my own custom hack to the ws object to give it an easily accessible id
- wsgrid[wsid] = ws;
- wsgrid[wsid].on('message', wsHandleMessage);
- safeSend(wsid,"connected:"+wsid);
- hb(wsid); //start the heartbeat
- });
- //HTTP Server Middleware
- app.get("/", function(req, res) {res.sendfile("index.html");});
- app.get("/*", function(req, res) {res.sendfile("script.js");});
- //HTTP Server
- app.listen(httpPort);
- console.log("Server running.");
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement