forked from nickholub/angular-real-time-charts
-
Notifications
You must be signed in to change notification settings - Fork 0
/
app.js
74 lines (57 loc) · 1.67 KB
/
app.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
var express = require('express');
var sockjs = require('sockjs');
var http = require('http');
var app = express();
// all environments
app.set('port', process.env.PORT || 3000);
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
console.log('environment: ' + app.get('env'));
if ('production' == app.get('env')) {
app.use(express.static(__dirname + '/dist'));
} else if ('development' == app.get('env')) {
app.use(express.static(__dirname + '/app'));
app.use(express.errorHandler());
}
var clients = {};
var clientCount = 0;
var interval;
var gaugeValue = 50;
function broadcast() {
gaugeValue += Math.random() * 40 - 20;
gaugeValue = gaugeValue < 0 ? 0 : gaugeValue > 100 ? 100 : gaugeValue;
var time = Date.now();
var message = JSON.stringify({ value: Math.floor(gaugeValue), timestamp: time });
for (var key in clients) {
if(clients.hasOwnProperty(key)) {
clients[key].write(message);
}
}
//setTimeout(broadcast, 1000);
}
function startBroadcast () {
interval = setInterval(broadcast, 1000);
//broadcast();
}
var sockjsServer = sockjs.createServer();
sockjsServer.on('connection', function(conn) {
clientCount++;
if (clientCount === 1) {
startBroadcast();
}
clients[conn.id] = conn;
conn.on('close', function() {
clientCount--;
delete clients[conn.id];
if (clientCount === 0) {
clearInterval(interval);
}
});
});
var server = http.createServer(app).listen(app.get('port'), function(){
console.log('Express server listening on port ' + app.get('port'));
});
sockjsServer.installHandlers(server, { prefix: '/sockjs' });