-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathsocket.js
More file actions
106 lines (91 loc) · 3.88 KB
/
socket.js
File metadata and controls
106 lines (91 loc) · 3.88 KB
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
97
98
99
100
101
102
103
104
var utils = require('./utils');
var socket_interval = 30000;
var refreshIntervalId = null;
var fetchData = function(socket, user, lastTimes){
console.log(lastTimes);
utils.getDbConnection().then((db)=>{
db.collection('sensors').find({user_id:user.id, display_chart:true}).toArray((err,data)=>{
if(err) {
console.log('Error getting sensor list:'+err);
socket.emit('error_msg', {
body: "Error getting sensor list, try again later"
});
socket.disconnect();
clearInterval(refreshIntervalId);
db.close();
}
else {
var sensorsInfo = [];
var client = utils.getCassandraConnection();
var promises = [];
for(var i=0; i < data.length; i++){
var sensorid = data[i]._id+'';
var sensorname = data[i].name;
sensorsInfo.push({
sensor_id: sensorid,
sensor_name: sensorname
});
if(true){ //testing condition purpose
if(lastTimes[0]){
if(lastTimes[0][i]) {
promises.push(client.execute("SELECT * FROM sensors WHERE sensorid=? AND userid=? AND created_epoch>?", [sensorid, user.id, lastTimes[0][i]], { prepare : true }));
} else promises.push(client.execute("SELECT * FROM sensors WHERE sensorid=? AND userid=? AND created_epoch>?", [sensorid, user.id, 0], { prepare : true }));
} else promises.push(client.execute("SELECT * FROM sensors WHERE sensorid=? AND userid=? AND created_epoch>?", [sensorid, user.id, 0], { prepare : true }));
} else {
promises.push(client.execute("SELECT * FROM sensors"));
}
}
Promise.all(promises).then((results) => {
var lastTime = [];
for(var i=0; i < results.length; i++){
results[i].information = sensorsInfo[i];
if(results[i].rowLength > 0) lastTime.push(results[i].rows[0].created_epoch);
else if(lastTimes[0]){
if(lastTimes[0][i]){
lastTime.push(lastTimes[0][i]);
} else lastTime.push(0);
} else lastTime.push(0);
}
lastTimes.length = 0;
lastTimes.push(lastTime);
socket.emit("chartsdata", results);
db.close();
}).catch((err) => {
socket.emit('error_msg', {
body: "Cassandra connection error, try again later"
});
socket.disconnect();
clearInterval(refreshIntervalId);
db.close();
});
}
db.close();
});
}).catch((err)=>{
console.log('Error connecting ');
});
};
module.exports.listen = function(socket) {
var token = socket.conn.request._query.auth_token;
try {
var user = utils.getUserFromToken(null, token);
if(!user){
socket.emit('error_msg', {
body: "User not found, or token expired"
});
socket.disconnect();
}
} catch(err) {
socket.emit('error', err);
socket.disconnect();
}
var lastRecordTimes = [];
fetchData(socket, user, lastRecordTimes);
refreshIntervalId = setInterval(function () {
fetchData(socket, user, lastRecordTimes);
}, socket_interval);
socket.on('disconnect', function() {
clearInterval(refreshIntervalId);
});
return socket;
};