From 5a3668a12e8c75d6b8220f1bdeec4375cef2a883 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Fri, 15 May 2020 22:04:49 +0200 Subject: [PATCH] Refactoring messages Socket.io can stringify JSON messages itself, so there is no need to pass a string to "emit". You can pass a serializable object! This commit removes all the useless toJson() methods, JSON.serialize and JSON.parse! Woot! --- back/src/Controller/IoSocketController.ts | 26 +++++++--------- front/src/Connexion.ts | 38 +++-------------------- front/src/WebRtc/SimplePeer.ts | 16 +++++----- 3 files changed, 25 insertions(+), 55 deletions(-) diff --git a/back/src/Controller/IoSocketController.ts b/back/src/Controller/IoSocketController.ts index 6349b352..781d811d 100644 --- a/back/src/Controller/IoSocketController.ts +++ b/back/src/Controller/IoSocketController.ts @@ -97,7 +97,7 @@ export class IoSocketController { try { let messageUserPosition = this.hydrateMessageReceive(message); if (messageUserPosition instanceof Error) { - return socket.emit(SockerIoEvent.MESSAGE_ERROR, JSON.stringify({message: messageUserPosition.message})) + return socket.emit(SockerIoEvent.MESSAGE_ERROR, {message: messageUserPosition.message}) } let Client = (socket as ExSocketInterface); @@ -129,7 +129,7 @@ export class IoSocketController { try { let messageUserPosition = this.hydrateMessageReceive(message); if (messageUserPosition instanceof Error) { - return socket.emit(SockerIoEvent.MESSAGE_ERROR, JSON.stringify({message: messageUserPosition.message})); + return socket.emit(SockerIoEvent.MESSAGE_ERROR, {message: messageUserPosition.message}); } let Client = (socket as ExSocketInterface); @@ -145,19 +145,17 @@ export class IoSocketController { } }); - socket.on(SockerIoEvent.WEBRTC_SIGNAL, (message: string) => { - let data: any = JSON.parse(message); + socket.on(SockerIoEvent.WEBRTC_SIGNAL, (data: any) => { //send only at user let client = this.searchClientById(data.receiverId); if (!client) { console.error("client doesn't exist for ", data.receiverId); return; } - return client.emit(SockerIoEvent.WEBRTC_SIGNAL, message); + return client.emit(SockerIoEvent.WEBRTC_SIGNAL, data); }); - socket.on(SockerIoEvent.WEBRTC_OFFER, (message: string) => { - let data: any = JSON.parse(message); + socket.on(SockerIoEvent.WEBRTC_OFFER, (data: any) => { //send only at user let client = this.searchClientById(data.receiverId); @@ -165,7 +163,7 @@ export class IoSocketController { console.error("client doesn't exist for ", data.receiverId); return; } - client.emit(SockerIoEvent.WEBRTC_OFFER, message); + client.emit(SockerIoEvent.WEBRTC_OFFER, data); }); socket.on(SockerIoEvent.DISCONNECT, () => { @@ -212,6 +210,7 @@ export class IoSocketController { return client; } console.log("Could not find user with id ", userId); + throw new Error("Could not find user with id " + userId); return null; } @@ -235,9 +234,9 @@ export class IoSocketController { * @param Client: ExSocketInterface */ sendDisconnectedEvent(Client: ExSocketInterface) { - Client.broadcast.emit(SockerIoEvent.WEBRTC_DISCONNECT, JSON.stringify({ + Client.broadcast.emit(SockerIoEvent.WEBRTC_DISCONNECT, { userId: Client.id - })); + }); //disconnect webrtc room if(!Client.webRtcRoomId){ @@ -257,7 +256,6 @@ export class IoSocketController { //user leave previous world let world : World|undefined = this.Worlds.get(Client.roomId); if(world){ - console.log('Entering world.leave') world.leave(Client); //this.Worlds.set(Client.roomId, world); } @@ -341,7 +339,7 @@ export class IoSocketController { return tabs; }, []); - client.emit(SockerIoEvent.WEBRTC_START, JSON.stringify({clients: clientsId, roomId: roomId})); + client.emit(SockerIoEvent.WEBRTC_START, {clients: clientsId, roomId: roomId}); }); } @@ -382,7 +380,7 @@ export class IoSocketController { //Hydrate and manage error hydrateMessageReceive(message: string): MessageUserPosition | Error { try { - return new MessageUserPosition(JSON.parse(message)); + return new MessageUserPosition(message); } catch (err) { //TODO log error return new Error(err); @@ -421,7 +419,7 @@ export class IoSocketController { } arrayMap.forEach((value: any) => { let roomId = value[0]; - this.Io.in(roomId).emit(SockerIoEvent.USER_POSITION, JSON.stringify(value)); + this.Io.in(roomId).emit(SockerIoEvent.USER_POSITION, value); }); this.seTimeOutInProgress = setTimeout(() => { this.shareUsersPosition(); diff --git a/front/src/Connexion.ts b/front/src/Connexion.ts index f29bef2e..b071c101 100644 --- a/front/src/Connexion.ts +++ b/front/src/Connexion.ts @@ -34,22 +34,12 @@ class Message { this.name = name; this.character = character; } - - toJson() { - return { - userId: this.userId, - roomId: this.roomId, - name: this.name, - character: this.character - } - } } export interface PointInterface { x: number; y: number; direction : string; - toJson() : object; } class Point implements PointInterface{ @@ -65,14 +55,6 @@ class Point implements PointInterface{ this.y = y; this.direction = direction; } - - toJson(){ - return { - x : this.x, - y: this.y, - direction: this.direction - } - } } export interface MessageUserPositionInterface { @@ -90,16 +72,6 @@ class MessageUserPosition extends Message implements MessageUserPositionInterfac super(userId, roomId, name, character); this.position = point; } - - toString() { - return JSON.stringify( - Object.assign( - super.toJson(), - { - position: this.position.toJson() - }) - ); - } } export interface ListMessageUserPositionInterface { @@ -274,7 +246,7 @@ export class Connexion implements ConnexionInterface { this.email, character ); - this.socket.emit(EventMessage.JOIN_ROOM, messageUserPosition.toString()); + this.socket.emit(EventMessage.JOIN_ROOM, messageUserPosition); } /** @@ -297,7 +269,7 @@ export class Connexion implements ConnexionInterface { character ); this.lastPositionShared = messageUserPosition; - this.socket.emit(EventMessage.USER_POSITION, messageUserPosition.toString()); + this.socket.emit(EventMessage.USER_POSITION, messageUserPosition); } attributeUserId(): void { @@ -326,7 +298,7 @@ export class Connexion implements ConnexionInterface { **/ positionOfAllUser(): void { this.socket.on(EventMessage.USER_POSITION, (message: string) => { - let dataList = JSON.parse(message); + let dataList = message; let UserPositions : Array = Object.values(dataList); let listMessageUserPosition = new ListMessageUserPosition(UserPositions[0], UserPositions[1]); this.GameManager.shareUserPosition(listMessageUserPosition); @@ -347,12 +319,12 @@ export class Connexion implements ConnexionInterface { } sendWebrtcSignal(signal: any, roomId: string, userId? : string, receiverId? : string) { - return this.socket.emit(EventMessage.WEBRTC_SIGNAL, JSON.stringify({ + return this.socket.emit(EventMessage.WEBRTC_SIGNAL, { userId: userId ? userId : this.userId, receiverId: receiverId ? receiverId : this.userId, roomId: roomId, signal: signal - })); + }); } receiveWebrtcStart(callback: Function) { diff --git a/front/src/WebRtc/SimplePeer.ts b/front/src/WebRtc/SimplePeer.ts index 02f35329..54b7e0ed 100644 --- a/front/src/WebRtc/SimplePeer.ts +++ b/front/src/WebRtc/SimplePeer.ts @@ -32,7 +32,7 @@ export class SimplePeer implements SimplePeerInterface{ private initialise() { //receive signal by gemer - this.Connexion.receiveWebrtcSignal((message: string) => { + this.Connexion.receiveWebrtcSignal((message: any) => { this.receiveWebrtcSignal(message); }); @@ -40,7 +40,7 @@ export class SimplePeer implements SimplePeerInterface{ this.MediaManager.getCamera().then(() => { //receive message start - this.Connexion.receiveWebrtcStart((message: string) => { + this.Connexion.receiveWebrtcStart((message: any) => { this.receiveWebrtcStart(message); }); @@ -49,8 +49,8 @@ export class SimplePeer implements SimplePeerInterface{ }); //receive signal by gemer - this.Connexion.disconnectMessage((message: string) => { - let data = JSON.parse(message); + this.Connexion.disconnectMessage((message: any) => { + let data = message; this.closeConnexion(data.userId); }); } @@ -59,8 +59,8 @@ export class SimplePeer implements SimplePeerInterface{ * * @param message */ - private receiveWebrtcStart(message: string) { - let data = JSON.parse(message); + private receiveWebrtcStart(message: any) { + let data = message; this.WebRtcRoomId = data.roomId; this.Users = data.clients; @@ -197,8 +197,8 @@ export class SimplePeer implements SimplePeerInterface{ * * @param message */ - private receiveWebrtcSignal(message: string) { - let data = JSON.parse(message); + private receiveWebrtcSignal(message: any) { + let data = message; try { //if offer type, create peer connexion if(data.signal.type === "offer"){