Last active
April 30, 2017 13:19
-
-
Save patidardhaval/15f39939693d0333b3b4 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
/** | |
* 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