Skip to content

Instantly share code, notes, and snippets.

@patidardhaval
Last active April 30, 2017 13:19
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save patidardhaval/15f39939693d0333b3b4 to your computer and use it in GitHub Desktop.
Save patidardhaval/15f39939693d0333b3b4 to your computer and use it in GitHub Desktop.
/**
* JSON FILE READ
*
* @version 0.2.1
* @author PATEL
*/
var http = require('http');
var cluster = require('cluster');
var numCPUs = require('os').cpus().length;
if (cluster.isMaster) {
// Fork workers.
console.log('Master cluster setting up ' + numCPUs + ' workers...');
for (var i = 0; i < numCPUs; i++) {
cluster.fork();
}
cluster.on('online', function (worker) {
console.log('Worker ' + worker.process.pid + ' is online');
});
cluster.on('exit', function (worker, code, signal) {
console.log('Worker %d died :(', worker.id);
cluster.fork();
});
}
else {
/* START OF APPLICATION */
var PORT = 2005;
var FETCH_INTERVAL = 300;
var express = require('express');
var io = require('socket.io');
var app = express();
var server = http.createServer(app);
var io = io.listen(server);
var rooms = [];
var TimerArr = [];
server.listen(PORT);
app.get('/', function (req, res) {
res.sendFile(__dirname + '/index.html');
});
app.use(function (req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
next();
});
var Client = 0;
io.sockets.on('connection', function (socket) {
++Client;
console.log("NEW client connected with socketid " + socket.id);
console.log("Total user = " + Client);
socket.on('ticker', function (ticker) {
socket.room = ticker;
socket.join(ticker);
isRoom(socket, ticker);
});
socket.on('disconnect', function () {
--Client;
console.log("client with socketid " + socket.id + " is leaved from " + socket.room + "");
console.log("Total user = " + Client);
socket.leave(socket.room);
var myroom = io.sockets.adapter.rooms[socket.room];
/* if room has no user close room */
if (myroom) {
console.log("room " + socket.room + " HAS " + Object.keys(myroom).length + " user");
}
else {
clearTimeout(TimerArr[socket.room]);
var index = rooms.indexOf(socket.room);
if (index >= 0) {
rooms.splice(index, 1);
}
console.log("last closed room " + socket.room);
}
});
});
function isRoom(socket, ticker) {
if (rooms.indexOf(ticker) == -1) {
console.log("new room created is " + ticker);
readjsonfile(socket, ticker);
rooms.push(ticker);
}
else {
var old_room = io.sockets.adapter.rooms[ticker];
console.log("join old room is " + ticker + " HAS " + Object.keys(old_room).length + " user");
}
}
function readjsonfile(p_socket, p_ticker) {
console.log("NUMBER OF TIMER = " + (TimerArr.length + 1) + " Date = " + Date.now() + " Total user = " + Client);
TimerArr[p_ticker] = setTimeout(function () {
var request = http.get({
host: '192.168.1.25',
port: 80,
path: '/' + p_ticker.replace('.', 'a') + '.json'
},
function (response) {
response.setEncoding('utf8');
var data = "";
response.on('data', function (chunk) {
data += chunk;
});
response.on('end', function () {
io.sockets.in(p_ticker).emit('quote', data);
});
}).on('error', function (e) {
console.log("Got error: " + e.message);
});
readjsonfile(p_socket, p_ticker);
}, FETCH_INTERVAL);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment