-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
91 lines (73 loc) · 2.89 KB
/
index.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
const express = require('express');
var http = require('http');
const app = express();
const port = process.env.PORT || 5000;
var server = http.createServer(app);
var io = require('socket.io')(server);
app.use(express.json());
const createdRooms = {};
io.on("connection", (socket) => {
console.log("Connected");
console.log(socket.id, "has joined");
socket.on("create-chat", (creatorName, roomName) => {
const roomId = generateRandomString(6);
createdRooms[roomId] = {
name: roomName,
createdBy: creatorName,
members: [creatorName],
};
socket.join(roomId);
socket.emit("generated-roomId", roomId);
});
socket.on("join-chat", (userName, roomId) => {
// conditions to check if the room already exists or not
// the roomId is the generated id by the generateRandomString() function
if(createdRooms[roomId]) {
createdRooms[roomId].members.push(userName);
socket.join(roomId);
// emit the name of chat group to the specific socket who has joined
socket.emit("chat-room-name", createdRooms[roomId].name);
// emit to other sockets that a user has joined
socket.to(roomId).emit("user-joined", userName);
// emit the list of chat members to all the sockets in the room
io.sockets.in(roomId).emit("members-list", createdRooms[roomId].members);
}
else {
socket.emit("room-not-found");
socket.disconnect();
}
});
socket.on('message', (roomId, message) => {
socket.to(roomId).emit('message', message);
});
socket.on('leave-chat', (memberName, roomId) => {
socket.leave(roomId);
socket.disconnect(); // disconnect socket from server
// emit the user name of the socket to the other sockets in room
socket.to(roomId).emit("user-left", memberName);
// remove the memberName from createdRooms[roomId].members array
createdRooms[roomId].members = arrayRemove(createdRooms[roomId].members, memberName);
// emit the list of chat members to all the sockets in the room
io.sockets.in(roomId).emit("members-list", createdRooms[roomId].members);
});
socket.on('disconnect', () => {
console.log('A user disconnected');
});
});
server.listen(port, "0.0.0.0", () => {
console.log("Server Started");
});
function generateRandomString(length) {
const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
let randomString = '';
for (let i = 0; i < length; i++) {
const randomIndex = Math.floor(Math.random() * characters.length);
randomString += characters.charAt(randomIndex);
}
return randomString;
}
function arrayRemove(arr, value) {
return arr.filter(function (name) {
return name != value;
});
}