-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathsocket.js
More file actions
135 lines (92 loc) · 2.93 KB
/
socket.js
File metadata and controls
135 lines (92 loc) · 2.93 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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
module.exports = function(app) {
var io = require('socket.io').listen(app);
io.configure(function(){
io.set('log level', 2)
});
// Messages buffer
var buffer = [];
var pushBuffer = function(data) {
buffer.push(data);
if (buffer.length > 50) {
buffer.unshift();
}
}
// Count how many sockets are connected
var getUsersCount = function(data) {
var sockets = io.sockets.sockets;
var usersCount = 0;
for (var key in sockets) {
if (sockets.hasOwnProperty(key)) {
usersCount++;
}
}
return usersCount;
}
io.sockets.on('connection', function(socket){
// When user joins
socket.on('join', function(username){
// Try to get old username
socket.get('username', function(err, oldUsername){
// Set new username
socket.set('username', username, function() {
if (oldUsername && oldUsername.length > 0) {
var msg = oldUsername + " has just renamed to " + username;
} else {
var msg = username + " joins the chat.";
}
var data = {
msg: msg
, username: 'Skynet'
, time: new Date()
, system: true
, onlineUsers: getUsersCount()
};
// Emit system message that user joins the chat
io.sockets.emit('system', data);
pushBuffer(data);
// If there is no old userName then is new user
if (!oldUsername) {
// Emit messages in buffer
for (i in buffer) {
if (buffer[i].system) socket.emit('system', buffer[i]);
else socket.emit('msg', buffer[i]);
}
}
});
});
});
// When user leaves
socket.on('disconnect', function(){
socket.get('username', function(err, username) {
if (!username) return false;
var data = {
msg: username + " leaves the chat."
, username: 'Skynet'
, time: new Date()
, system: true
, onlineUsers: getUsersCount() - 1
};
// Emit system message that user leaves the chat
socket.broadcast.emit('system', data);
pushBuffer(data);
})
});
// When user gets message
socket.on('msg', function(msg){
// Add in check if message isn't empty
if (msg && msg.length < 1) return false;
// Get username first
socket.get('username', function(err, username) {
var data = {
username: username
, time: new Date()
, msg: msg
}
// Broadcast the data
socket.broadcast.emit('msg', data);
pushBuffer(data);
});
});
});
return io;
}