-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathsocket-events.js
More file actions
128 lines (109 loc) · 3.13 KB
/
socket-events.js
File metadata and controls
128 lines (109 loc) · 3.13 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
var async = require("async");
var RoomController = require("./controllers/room-controller.js");
// Session is not included with the namespace
// When assigning events to namespaces, from the database,
// newly created rooms aren't registered.
module.exports = function(io, sharedSession, sessionSetup){
/*
// Broadcasts a list of online users.
// To be displayed as a "connected users" list in room view
// Emitted whenever there's a connect or a disconnect.
function emitUsersList(namespace, rawLink){
console.log(rawLink);
RoomController.getRoomOnlineUsers(rawLink)
.then((onlineUsers)=>{
var usersList = onlineUsers.map((item)=>{
return item.name;
});
namespace.emit("users-list", usersList);
}).catch((err)=>{
console.log(err);
});
}
*/
// Events must be defined under io (general)
io.on("connection", (socket)=>{
var room;
var user; // From the session object
socket.on("disconnect", ()=>{
if(!user || !room){
console.log("Ambiguous disconnection");
return;
}
RoomController.exitRoom(user, room)
.then((roomInstance)=>{
room = roomInstance;
}).catch((err)=>{
console.log(err);
});
});
// User submitted a link, to be connected to a room.
socket.on("link", (link)=>{
user = socket.handshake.session.user;
// No user registered in the session
if(!user){
delete user;
console.log("Unauthenticated access to " + link);
return;
}
// Validate that the room is a valid room.
RoomController.getRoomByLink(link)
.then((roomInstance)=>{
room = roomInstance;
console.log("socket-event.js 149 ", room.rawLink);
socket.join(room.rawLink, ()=>{
console.log(room.rawLink, " opened");
// console.log(socket.rooms);
// var userObject = {id: user.id, name: user.name};
RoomController.enterRoom(user, room)
.then(()=>{
console.log("Added user successfully");
// To prevent the user from instantly
// firing off a new-user 'event'.
// Helps in havin the server first find the room.
socket.emit("joined-successfully");
}).catch((err)=>{
console.log(err);
});
})
}).catch((error)=>{
// An authenticated user tried accessing a non-existent room.
if(user.name){
console.log(`Access to non-existent room ${link} from ${user.name}`);
// Anonymous access
}else{
console.log(`Anonymous access to non-existent room ${link}`);
}
});
});
// I'm not sure how the room is updated with new users
// without a database call.
// Broadcast a list of all conneted users.
socket.on("new-user", ()=>{
if(!room || !room.rawLink){
console.log("No room was set - 87");
return;
}
var usersList = room.onlineUsers.map((user)=>{
return user.name;
});
io.to(room.rawLink).emit("users-list", usersList);
});
// Broadcast the message to all users.
socket.on("message", (message)=>{
if(!user){
console.log("Anonymous tried to send message - 100");
return;
}
if(!room){
console.log("Message sent to vacum");
}
console.log(`${message} came to ${room.rawLink}`);
var messageObject = {
sender: user.name,
content: message
};
io.to(room.rawLink).emit("message", messageObject);
});
});
}