-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathserver.js
More file actions
95 lines (83 loc) · 2.67 KB
/
server.js
File metadata and controls
95 lines (83 loc) · 2.67 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
var expressIO = require('express.io'),
serveStatic = require('serve-static');
var app = expressIO();
app.use(expressIO.cookieParser());
app.use(expressIO.session({secret: 'monkey'}));
app.http().io();
app.listen(8000);
// Session is automatically setup on initial request.
app.get('/', function(req, res) {
req.session.loginDate = new Date().toString();
res.sendfile(__dirname + '/build/index.html');
});
app.use(expressIO.static(__dirname + '/'));
app.use(expressIO.static(__dirname + '/build'));
var users = {};
var messages = [];
var personalChats = {};
app.io.route('user', {
create: function(req) {
users[req.socket.id] = req.data.username;
req.io.broadcast('user:created', {id: req.socket.id, username: req.data.username});
req.io.emit('user:registered', req.socket.id);
},
list: socketUsersList,
remove: function(req) {
if (users[req.data.id]) {
delete users[req.data.id];
}
socketUsersList(req);
}
});
app.io.route('chatmessage', {
create: function (req) {
var time = (+new Date());
var message = {
message: req.data.message,
time: time,
userId: req.data.userId
};
messages.push(message);
message.username = users[req.data.userId];
req.io.broadcast('chatmessage:created', message);
}
});
app.io.route('chat', {
create: function (req) {
var personalChat = getPersonalChat(req.data.leftUserId, req.data.rightUserId);
req.io.emit('chat:messages:' + req.data.rightUserId, {
colleague: users[req.data.rightUserId],
messages: personalChat
});
},
message: function (req) {
var time = (+new Date());
var personalChat = getPersonalChat(req.data.leftUserId, req.data.rightUserId);
var message = {
message: req.data.message,
time: time,
userId: req.data.leftUserId
};
personalChat.push(message);
message.username = users[req.data.leftUserId];
req.io.broadcast('chat:message:' + req.data.rightUserId, message);
}
});
function getPersonalChat(leftUserId, rightUserId) {
var chat = personalChats[leftUserId + rightUserId] || personalChats[rightUserId + leftUserId];
if (!chat) {
personalChats[leftUserId + rightUserId] = [];
chat = [];
}
return chat;
}
function socketUsersList(req) {
var usersArr = [];
for (var userId in users) {
if (users.hasOwnProperty(userId)) {
usersArr.push({id: userId, username: users[userId]});
}
}
req.io.emit('users:listed', {responses: usersArr});
}
exports = module.exports = app;