-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
96 lines (81 loc) · 2.23 KB
/
index.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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
var parseArgs = require('minimist');
var argv = parseArgs( process.argv , {
number: [ 'port' ],
string: [ 'comport' ],
boolean: [ 'debug']
});
var port = argv.port || 'NULL';
var debug = argv.debug || false;
var comport = argv.comport;
console.log('Starting water rower.');
console.log('\tPort: ', argv.port);
console.log('\tCom port: ', argv.comport);
console.log('\tDebug: ', debug);
var server = require('http').createServer();
var ws = require('ws');
var url = require('url');
var WebSocketServer = ws.Server;
var wsServer = new WebSocketServer({ server: server });
var wr = require('./water_rower.js')({ debug: debug} );
var express = require('express');
var app = express();
app.get('/', express.static(__dirname+'/public') );
var rower;
var lastBroadcast = Date.now();
function broadcastClients(msg, cooldown){
var currTime = Date.now();
if ( (currTime - lastBroadcast) >= (cooldown || 0) ) {
lastBroadcast = currTime;
wsServer.clients.forEach( function(client) {
client.send( JSON.stringify(msg), function(err) {
if (err) {
console.log(err.toString());
}
});
});
}
}
function setupRower() {
rower = new wr.WaterRower({ port: comport });
rower.on('readings', function(msg) {
broadcastClients( {
type: 'readings',
data: msg
},100);
});
rower.on('keypad', function(msg){
broadcastClients( {
type: 'keypad',
data: msg
});
});
}
wsServer.on('connection', function connection(sock) {
var location = url.parse(sock.upgradeReq.url, true);
sock.on('close', function _accounceDisconnect(){
console.log("Socket disconnect.");
});
sock.on('message', function _socketMessage(msg){
console.log("Socket sent message: ", msg.toString() );
try {
var parsedMsg = JSON.parse(msg);
if (parsedMsg.msg === 'reset rower') {
setupRower();
}
} catch (e) {
console.log('Error handling message: ', e.toString());
}
});
console.log("Socket connect.");
});
server.on('request', app);
server.listen(port, function () {
console.log('Listening on ' + server.address().port)
});
process.on('SIGINT', function() {
console.log("\nSIGINT (Ctrl+C)");
if (rower) {
rower.shutdown();
}
process.exit(0);
});