Skip to content

Commit 7e9125f

Browse files
committed
Finish server side
1 parent 0c998b9 commit 7e9125f

1 file changed

Lines changed: 61 additions & 7 deletions

File tree

functions.js

Lines changed: 61 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -76,11 +76,35 @@ class Room {
7676
* @property {any} extra
7777
*/
7878
addUser(user) {
79-
this.users.forEach(userr => {
80-
user.socket.emit('user-connected', userr.userid);
81-
})
8279
this.users.push(user);
8380
this.current++;
81+
this.users.forEach(userr => {
82+
userr.socket.emit('users-updated', this.getUsers());
83+
})
84+
}
85+
getUsers() {
86+
const rv = {};
87+
for (let i=0; i<this.users.length; i++) {
88+
rv[this.users[i].extra.userid] = this.users[i].extra;
89+
}
90+
return rv;
91+
}
92+
terminate() {
93+
for (let i=0; i<this.users.length; i++) {
94+
this.users[i].socket.disconnect();
95+
}
96+
}
97+
userLeft(userid) {
98+
this.current--;
99+
for (let i=0; i<this.users.length; i++) {
100+
if (this.users[i].extra.userid === userid) {
101+
this.users.splice(i, 1);
102+
break;
103+
}
104+
}
105+
this.users.forEach(userr => {
106+
userr.socket.emit('users-updated', this.getUsers());
107+
})
84108
}
85109
}
86110

@@ -90,18 +114,48 @@ function start(io, rooms, numusers, devv) {
90114
io.on('connection', (socket) => {
91115
updateusers();
92116
let url = socket.handshake.url;
93-
let args = transformArgs(url);
94-
let extraData = JSON.parse(args.extra);
95117
let room = null;
118+
let extraData;
96119

120+
socket.on("disconnect", () => {
121+
if (extraData.userid === room.owner.userid) {
122+
room.terminate();
123+
global.rooms.splice(global.rooms.indexOf(room));
124+
} else {
125+
room.userLeft(extraData.userid);
126+
}
127+
})
97128
socket.on('open-room', function(data, cb) {
98-
room = new Room(data.extra.domain, data.extra.game_id, args.sessionid, data.extra.room_name, args.maxParticipantsAllowed, 1, data.password.trim(), args.userid, socket, data.extra, args.coreVer);
129+
if (getRoom(data.extra.domain, data.extra.game_id, data.extra.sessionid) !== null) {
130+
cb(true);
131+
return;
132+
}
133+
room = new Room(data.extra.domain, data.extra.game_id, data.extra.sessionid, data.extra.room_name, data.maxPlayers, 1, data.password.trim(), data.extra.userid, socket, data.extra);
99134
global.rooms.push(room);
100135
extraData = data.extra;
101-
socket.emit('extra-data-updated', args.userid, extraData);
102136
socket.join(room.id);
137+
cb(false);
138+
//console.log(room);
103139

104140
})
141+
socket.on('join-room', function(data, cb) {
142+
room = getRoom(data.extra.domain, data.extra.game_id, data.extra.sessionid);
143+
if (room === null || (room && room.current >= room.max)) {
144+
cb(true, (room === null) ? "ROOM_NOT_FOUND" : "ROOM_FULL");
145+
return;
146+
}
147+
extraData = data.extra;
148+
room.addUser({
149+
socket: socket,
150+
extra: extraData
151+
});
152+
socket.join(room.id);
153+
cb(false, room.getUsers());
154+
155+
})
156+
socket.on("data-message", (data) => {
157+
socket.to(room.id).emit("data-message", data);
158+
})
105159

106160

107161
});

0 commit comments

Comments
 (0)