-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathserver.js
More file actions
73 lines (61 loc) · 2.38 KB
/
server.js
File metadata and controls
73 lines (61 loc) · 2.38 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
require('dotenv').config()
var port = process.argv[process.argv.length-1] != undefined ? process.argv[process.argv.length-1] : 3000;
if (process.env.SOCKET_SSL == true || process.env.SOCKET_SSL == 'true'){
var fs = require ('fs');
var server = require('https').createServer({
key: fs.readFileSync(process.env.SSL_KEY || '/etc/nginx/ssl/server.key'),
cert: fs.readFileSync(process.env.SSL_CRT || '/etc/nginx/ssl/server.crt')
});
var http = require('https');
} else {
var server = require('http').Server();
var http = require('http');
}
var io = require('socket.io')(server);
io.attach(server);
// Middleware to be initialized in case we need
// to process the driver or user ID in any
// future features.
io.use((socket, next) => {
return next();
});
var openConnections = {};
io.on('connection', (socket) => {
var id = socket.handshake.query.user_id;
var driver = socket.handshake.query.driver;
if (driver in openConnections) {
openConnections[driver].push(id);
} else {
openConnections[driver] = []
openConnections[driver].push(id);
}
socket.on('disconnect', () => {
var index = openConnections[driver].indexOf(id);
if (index > -1) {
openConnections[driver].splice(index, 1);
}
var x = 0;
var intervalID = setInterval(() => {
if (openConnections[driver].includes(id)) {
clearInterval(intervalID);
// The user is back! In this scenario, The user was either refreshing
// the page, or going to another page on the same site.
// So we're ok to keep him logged in.
} else {
// The user didn't connect for more than 5 seconds, So it means
// he left the site, closed all site tabs, closed browser,
// the browser crashed, Or the system crashed.
if (++x === 5) {
clearInterval(intervalID);
http.get(`${process.env.APP_URL}/pbs/logout/${driver}/${id}`, (resp) => {
// The User has been logged out supposedly.
}).on("error", (err) => {
console.log("Error: " + err.message);
});
}
}
}, 1000)
});
});
server.listen(port);
console.log(`Server running on port: ${port}`);