-
Notifications
You must be signed in to change notification settings - Fork 3
/
sockets.js
75 lines (72 loc) · 1.83 KB
/
sockets.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
module.exports = function(io, db) {
var collection;
var request = require('request');
var uid;
var ip;
var users = {};
io.on('connection', function(socket) {
collection = db.get('onlines');
ip = socket.handshake.headers['x-real-ip'];
socket.on('sendMessage', function(msg) {
socket.broadcast.emit('showMessage', msg);
});
socket.on('userConnect', function(data) {
uid = data.uid;
socket.broadcast.emit('addActivity', uid + ' connected!');
users[socket.id] = uid;
addUser(uid, ip);
});
function updateMarkers() {
collection.aggregate(
[{
"$group": {
"_id": {
"lat": "$lat",
"lng": "$lng"
},
"sum": {
"$sum": 1
}
}
}],
function(err, docs) {
if (docs.length) {
socket.emit('updateMarkers', docs);
socket.broadcast.emit('updateMarkers', docs);
}
});
}
function addUser(uid, ip) {
request('http://ip-api.com/json/' + ip, function(err,
response, body) {
if (!err && response.statusCode == 200) {
body = JSON.parse(body);
var data = {
uid: uid,
lat: body.lat,
lng: body.lon
};
collection.update({
uid: uid
}, data, {
upsert: true
},
function(error, docs) {
updateMarkers();
});
return data;
}
});
socket.on('disconnect', function(a) {
duid = users[socket.id];
collection.remove({
uid: uid
});
socket.broadcast.emit('addActivity', uid +
' disconnected!');
updateMarkers();
delete users[socket.id];
});
};
});
};