Refactoring messages
authorDavid Négrier <d.negrier@thecodingmachine.com>
Fri, 15 May 2020 20:04:49 +0000 (22:04 +0200)
committerDavid Négrier <d.negrier@thecodingmachine.com>
Fri, 15 May 2020 20:04:49 +0000 (22:04 +0200)
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
front/src/Connexion.ts
front/src/WebRtc/SimplePeer.ts

index 6349b352e35180473a8aca15d755b654830d4fe4..781d811dd2d514ff726b9ed1712c49195b0ed0b5 100644 (file)
@@ -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();
index f29bef2ef1a388e260aa09359b14fb64f4e99a62..b071c10130f60dae07ef9758336976ad2fe6fc8f 100644 (file)
@@ -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<any> = 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) {
index 02f35329c01fd1fad1372e4b6e11098d427c4b68..54b7e0ed51ec7127ceb9dced4fb1421db19a3214 100644 (file)
@@ -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"){