-
Notifications
You must be signed in to change notification settings - Fork 0
/
server.js
167 lines (139 loc) · 5.39 KB
/
server.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
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
// Fs module
let fs = require('fs');
let data = fs.readFileSync('rooms.json');
let rooms = JSON.parse(data);
console.log(rooms);
let express = require('express');
let app = express();
app.use(express.json());
let server = require('http').createServer(app);
let io = require('socket.io').listen(server);
server.listen(process.env.PORT || 8000);
console.log('Server is running at http://localhost:8000/');
app.use(express.static("public-client")); //client related files i.e html, js, css
//Usernames
usernames = [];
/* ---------------------------Rooms api ---------------------------*/
//Rooms
// const rooms = [
// { id: 1, name: 'room1'}
// ]
//Get all rooms
app.get('/api/rooms', function (req, res) {
res.send(rooms);
});
// GET specific room according to id
app.get('/api/rooms/:id', (req, res) => {
// Look up the room if no exist, return 404
const room = rooms.find(c => c.id === parseInt(req.params.id));
if (!room)
return res.status(404).send('The room with specific id is not found');
// Return the same room
res.send(room);
});
// POST room (Do not forgot using 'app.use(express.json());' up)
app.post('/api/rooms', (req, res) => {
//Validation for unique room
for (let room of rooms) {
if (room.name === req.body.name) {
res.status(409).send("Roomname is already taken! Try again.");
return;
}
}
// Validate, if invalid return 400 - Bad request
if (!req.body.name)
return res.status(400).send('Name is required')
// room to be added
const room = {
id: rooms.length + 1,
name: req.body.name
};
// Add the room with push
rooms.push(room);
// Return the added room
res.send(room)
// Fs module
let data = JSON.stringify(rooms);
fs.writeFile('rooms.json', data, finished);
function finished(err) {
console.log('all set')
}
});
// DELETE room
app.delete('/api/rooms/:id', (req, res) => {
// Look up the room if no exist, return 404
const room = rooms.find(c => c.id === parseInt(req.params.id));
if (!room)
return res.status(404).send('The room with specific id is not found');
// Delete
const index = rooms.indexOf(room);
rooms.splice(index, 1);
// Return the deleted room
res.send(room);
// Fs module
let data = JSON.stringify(rooms);
fs.writeFile('rooms.json', data, finished);
function finished(err) {
console.log('all set')
}
});
/* ------------------------End Rooms api ---------------------------*/
io.sockets.on('connection', function (socket) {
console.log('Socket Connected at: ' + socket.id);
socket.on('new user', function (data, callback, username) {
//Broadcast msg from Admin to everone except him
socket.broadcast.emit('updatechat', 'Admin', 'A new User has CONNECTED!');
if (usernames.indexOf(data) != -1) {
callback(false);
} else {
callback(true);
socket.username = data;
usernames.push(socket.username);
updateUsernames();
}
//Room
socket.room = rooms[0].name; //Connect to default First room
console.log('socket room: ', socket.room);
socket.join(socket.room);
// Admin welcome message to everyone at the start
socket.emit('updatechat', 'Admin', '<b style="color:green">' + socket.username + '</b>' +' has connected to room ' + '<b style="color:blue">' + socket.room+ '</b>');
//socket.emit('updatechat', 'Admin', socket.username + ' has connected to room ' + '<b style="color:blue">' +newroom + '</b>');
socket.emit('updaterooms', rooms, socket.room);
// // get all the clients in ‘room1′
// var clients = io.sockets.clients(socket.room);
// // loop through clients in ‘room1′ and add their usernames to the roomusers array
// for(var i = 0; i < clients.length; i++) {
// roomusers[roomusers.length] = clients[i].username;
// }
// // broadcast to everyone in room 1 the usernames of the clients connected.
// io.sockets.to(socket.room).emit('updateroomusers',roomusers);
});
socket.on('switchRoom', function (newroom) {
socket.leave(socket.room);
socket.join(newroom);
socket.emit('updatechat', 'Admin', '<b style="color:green">' + socket.username + '</b>' + ' has connected to room ' + '<b style="color:blue">' +newroom + '</b>');
// sent message to OLD room
socket.broadcast.to(socket.room).emit('updatechat', 'Admin', socket.username + ' has left this room');
// update socket session room title
socket.room = newroom;
socket.broadcast.to(newroom).emit('updatechat', 'Admin', socket.username + ' has joined this room');
socket.emit('updaterooms', rooms, newroom);
});
// Update Usernames
function updateUsernames() {
io.sockets.emit('usernames', usernames);
}
// Send Message
socket.on('send message', function (data) {
io.sockets.in(socket.room).emit('new message', { msg: data, user: socket.username });
});
// DisconnectA new User has connected
socket.on('disconnect', function (data) {
if (!socket.username) {
return;
}
usernames.splice(usernames.indexOf(socket.username), 1);
updateUsernames();
socket.broadcast.emit('updatechat', 'Admin', 'An User has DISCONNECTED!');
});
});