-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathserver.js
More file actions
67 lines (61 loc) · 1.59 KB
/
server.js
File metadata and controls
67 lines (61 loc) · 1.59 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
// 0 register
// 1 current users
// 2 send to user
// 3 usreslist
// 4 unregister
const net = require('net');
const users = {};
const sendUsers = () => {
var list = new Buffer((Object.keys(users).length * 3) + 1);
list[0] = 3;
var pos = 1;
Object.keys(users).forEach((key) => {
list[pos] = 0;
list.writeInt16BE(key, pos + 1);
pos += 3;
});
Object.keys(users).forEach((key) => {
users[key].write(list);
});
console.log(list);
};
var server = net.createServer(function(sock) {
console.log('CONNECTED: ' + sock.remoteAddress + ':' + sock.remotePort);
sock.on('error', function(err) {
//Prevent possible ECONNRESET errors from popping up
if (err.code !== 'ECONNRESET')
throw err;
});
sock.on('data', function(data) {
var command = data.readInt8();
console.log('data coomand = ' + command + ' ' + data);
switch (command) {
case 0:
var name = data.readInt16BE(1);
console.log('Registred ' + name);
users[name] = sock;
sock.iid = name;
sendUsers();
break;
case 2:
var to = data.readInt16BE(1);
var newBuff = data.slice(3);
//console.log(to, newBuff, users[to]);
if (users[to]) {
users[to].write(newBuff);
}
break;
case 4:
var from = data.readInt16BE(1);
delete users[from];
break;
default:
}
});
sock.on('close', function(data) {
console.log('CLOSED: ' + sock.remoteAddress + ' ' + sock.remotePort + sock.iid);
delete users[sock.iid];
console.log(users);
});
});
server.listen(7007);