From 3b6fe8da8d591974a81bb9dd362c45cca30209f0 Mon Sep 17 00:00:00 2001 From: kharhamel Date: Fri, 26 Mar 2021 15:13:08 +0100 Subject: [PATCH] improved the back to better handle ghost connexions --- back/src/RoomManager.ts | 9 +++++++-- back/src/Services/SocketManager.ts | 14 +++++++------- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/back/src/RoomManager.ts b/back/src/RoomManager.ts index 0a8e4a01..60e90d82 100644 --- a/back/src/RoomManager.ts +++ b/back/src/RoomManager.ts @@ -43,8 +43,13 @@ const roomManager: IRoomManagerServer = { if (room === null || user === null) { if (message.hasJoinroommessage()) { socketManager.handleJoinRoom(call, message.getJoinroommessage() as JoinRoomMessage).then(({room: gameRoom, user: myUser}) => { - room = gameRoom; - user = myUser; + if (call.writable) { + room = gameRoom; + user = myUser; + } else { + //Connexion may have been closed before the init was finished, so we have to manually disconnect the user. + socketManager.leaveRoom(gameRoom, myUser); + } }); } else { throw new Error('The first message sent MUST be of type JoinRoomMessage'); diff --git a/back/src/Services/SocketManager.ts b/back/src/Services/SocketManager.ts index 75e683d3..c03f4773 100644 --- a/back/src/Services/SocketManager.ts +++ b/back/src/Services/SocketManager.ts @@ -81,6 +81,13 @@ export class SocketManager { //join new previous room const {room, user} = await this.joinRoom(socket, joinRoomMessage); + if (!socket.writable) { + console.warn('Socket was aborted'); + return { + room, + user + }; + } const roomJoinedMessage = new RoomJoinedMessage(); roomJoinedMessage.setTagList(joinRoomMessage.getTagList()); @@ -96,7 +103,6 @@ export class SocketManager { const serverToClientMessage = new ServerToClientMessage(); serverToClientMessage.setRoomjoinedmessage(roomJoinedMessage); - console.log('SENDING MESSAGE roomJoinedMessage'); socket.write(serverToClientMessage); return { @@ -264,8 +270,6 @@ export class SocketManager { debug('Room is empty. Deleting room "%s"', room.roomId); } } finally { - //delete Client.roomId; - //this.sockets.delete(Client.userId); clientEventsEmitter.emitClientLeave(user.uuid, room.roomId); console.log('A user left'); } @@ -415,10 +419,6 @@ export class SocketManager { } private joinWebRtcRoom(user: User, group: Group) { - /*const roomId: string = "webrtcroom"+group.getId(); - if (user.socket.webRtcRoomId === roomId) { - return; - }*/ for (const otherUser of group.getUsers()) { if (user === otherUser) {