-
Notifications
You must be signed in to change notification settings - Fork 0
/
webSocketHandling.js
136 lines (122 loc) · 4.12 KB
/
webSocketHandling.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
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
136
var socketio = require("socket.io");
var uuid = require("uuid");
var _ = require("lodash")
// DB Vars
var serverReady = false;
var userModel = require('./Schemas/User')
module.exports.listen = function(app, mongooseInstance, dataSet) {
mongooseInstance.once('open',function callback() {
serverReady = true;
})
io = socketio.listen(app);
io.on("connection", function(socket) {
/*
User Registration
*/
console.log("A user has connected");
socket.on("registerID", payload => {
console.log
if (serverReady){
var newUser = new userModel({publicName:payload})
newUser.save().then( (user,err) => {
if (err){
console.log("ERROR USER")
console.log(err);
}
else {
console.log("emitting")
IOWhisper(socket.id,"register", {
privateID: user.privateID,
publicID: user.publicID,
publicName: user.publicName
});
dataSet.currentUsers[user.publicID] = { socket: socket , publicName:user.publicName};
dataSet.currentUsers.length = dataSet.currentUsers.length + 1;
console.log("Current User Dataset: " + dataSet.currentUsers.length + "\n");
}
})
}
})
function IOWhisper(socketID,channel,payload) {
io.to(`${socketID}`).emit(
channel,
payload
);
}
function mapToPayloadUsers(chatID,functionToMap,payload,publicID = null){
var chatToBeModified = dataSet.chats[chatID]
for (user in chatToBeModified.users){
if (chatToBeModified.users[user] != publicID){
var selectedUser = chatToBeModified.users[user]
functionToMap(selectedUser,payload)
}
}
}
socket.on("Chat isTyping", payload => {
mapToPayloadUsers(payload.id,
function (selectedUser,payload){
IOWhisper(dataSet.currentUsers[selectedUser].socket.id,"Chat isTyping",payload)
},
payload,
payload.publicID
)
})
//Sends Text to all members of chat except sendee
socket.on("Chat Broadcast", payload => {
mapToPayloadUsers(payload.id,
function (selectedUser,payload){
IOWhisper(dataSet.currentUsers[selectedUser].socket.id,"Chat Broadcast",payload)
},
payload,
payload.publicID
)
});
socket.on("Add Chat", data => {
// Verify that the requested chat connection has two EXISTING participants
if (
dataSet.currentUsers[data.publicID] &&
dataSet.currentUsers[data.friendID]
) {
var chat = {
id:uuid(),
name: "New Chat"
}
// Store existance of chat for future routing
dataSet.chats[chat.id] = {
users: [data.publicID, data.friendID],
host: [data.publicID]
};
dataSet.chats[chat.id].users.map(function(key,index) {
var friendID ;
if (index === 0){
friendID = dataSet.chats[chat.id].users[1]
}
else {
friendID = dataSet.chats[chat.id].users[0]
}
chat["name"] = dataSet.currentUsers[friendID].publicName
IOWhisper(dataSet.currentUsers[key].socket.id,"Add Chat",chat)
});
} else {
console.log(dataSet.currentUsers);
console.log(data);
console.log("Provided ID does not exist");
}
});
socket.on("disconnect", function() {
// Take Object managing gcurrent Users and remove the disconnected user
console.log("A user has disconnected");
Object.keys(dataSet.currentUsers).map(index => {
if (dataSet.currentUsers[index].socket === undefined) {
delete dataSet.currentUsers[index];
dataSet.currentUsers.length = dataSet.currentUsers.length - 1;
} else if (dataSet.currentUsers[index].socket.id === socket.id) {
delete dataSet.currentUsers[index];
dataSet.currentUsers.length = dataSet.currentUsers.length - 1;
}
});
console.log("Post-splice length: " + dataSet.currentUsers.length + "\n");
});
});
return io;
};