Refactor and fix error hydration message socket io
authorgparant <g.parant@thecodingmachine.com>
Sat, 4 Apr 2020 14:25:03 +0000 (16:25 +0200)
committergparant <g.parant@thecodingmachine.com>
Sat, 4 Apr 2020 14:25:03 +0000 (16:25 +0200)
 - Position message send will be on format :
message :
                    userId : user identification
                    roomId: room identification
                    position: position of user in map
                        x: user x position on map
                        y: user y position on map
 - Create Point object and interface to have position x and y of user in map.

back/src/Controller/IoSocketController.ts
back/src/Model/Websocket/ExSocketInterface.ts
back/src/Model/Websocket/MessageUserPosition.ts
back/src/Model/Websocket/PointInterface.ts [new file with mode: 0644]
back/tsconfig.json

index abc5210fa1bdf0d8cf9824818ba5afd95d0e9b43..fba029b7ecce17fb4176d7d9e60f39c32fc768b8 100644 (file)
@@ -1,8 +1,8 @@
 import socketIO = require('socket.io');
 import {Socket} from "socket.io";
 import * as http from "http";
-import {MessageUserPosition} from "@Model/Websocket/MessageUserPosition";
-import {ExSocketInterface} from "@Model/Websocket/ExSocketInterface";
+import {MessageUserPosition} from "../Model/Websocket/MessageUserPosition"; //TODO fix to use "_Model/.."
+import {ExSocketInterface} from "../Model/Websocket/ExSocketInterface"; //TODO fix to use "_Model/.."
 import Jwt, {JsonWebTokenError} from "jsonwebtoken";
 
 const SECRET_KEY = process.env.SECRET_KEY || "THECODINGMACHINE_SECRET_KEY";
@@ -35,19 +35,29 @@ export class IoSocketController{
                 message :
                     userId : user identification
                     roomId: room identification
-                    positionXUser: user x position map
-                    positionYUser: user y position on map
+                    position: position of user in map
+                        x: user x position on map
+                        y: user y position on map
             */
-            socket.on('join-room', (message : MessageUserPosition) => {
-                socket.join(message.roomId);
+            socket.on('join-room', (message : string) => {
+                let messageUserPosition = new MessageUserPosition(message);
+                socket.join(messageUserPosition.roomId);
                 // sending to all clients in room except sender
-                socket.to(message.roomId).emit('join-room', message.toString());
+                this.saveUserPosition((socket as ExSocketInterface), messageUserPosition);
+                socket.to(messageUserPosition.roomId).emit('join-room', messageUserPosition.toString());
             });
 
-            socket.on('user-position', (message : MessageUserPosition) => {
+            socket.on('user-position', (message : string) => {
+                let messageUserPosition = new MessageUserPosition(message);
                 // sending to all clients in room except sender
-                socket.to(message.roomId).emit('join-room', message.toString());
+                this.saveUserPosition((socket as ExSocketInterface), messageUserPosition);
+                socket.to(messageUserPosition.roomId).emit('join-room', messageUserPosition.toString());
             });
         });
     }
+
+    //permit to save user position in socket
+    saveUserPosition(socket : ExSocketInterface, message : MessageUserPosition){
+        socket.position = message.position;
+    }
 }
\ No newline at end of file
index 6adcb4771f9d0f75a70a7e98a7e85cd9626ecb09..51df9258c48a8b4e87b16bb2450f1fcd0c4458d8 100644 (file)
@@ -1,5 +1,7 @@
 import {Socket} from "socket.io";
+import {PointInterface} from "./PointInterface";
 
 export interface ExSocketInterface extends Socket {
     token: object;
+    position: PointInterface;
 }
\ No newline at end of file
index b37b50896bd1b7cd7c5d1b7996d2b97f16f75c0f..663ce71d4036f25fa7f287c7670bb35ce4620255 100644 (file)
@@ -1,14 +1,30 @@
 import {Message} from "./Message";
+import {PointInterface} from "./PointInterface";
+
+export class Point implements PointInterface{
+    x: number;
+    y: number;
+
+    constructor(x : number, y : number) {
+        this.x = x;
+        this.y = y;
+    }
+
+    toJson(){
+        return {
+            x : this.x,
+            y: this.y
+        }
+    }
+}
 
 export class MessageUserPosition extends Message{
-    positionXUser: string;
-    positionYUser: string;
+    position: PointInterface
 
     constructor(message: string) {
         super(message);
         let data = JSON.parse(message);
-        this.positionXUser = data.positionXUser;
-        this.positionYUser = data.positionYUser;
+        this.position = new Point(data.position.x, data.position.y);
     }
 
     toString() {
@@ -16,8 +32,7 @@ export class MessageUserPosition extends Message{
             Object.assign(
                 super.toJson(),
                 {
-                    positionXUser: this.positionXUser,
-                    positionYUser: this.positionYUser
+                    position: this.position.toJson()
                 })
         );
     }
diff --git a/back/src/Model/Websocket/PointInterface.ts b/back/src/Model/Websocket/PointInterface.ts
new file mode 100644 (file)
index 0000000..7f2ab39
--- /dev/null
@@ -0,0 +1,5 @@
+export interface PointInterface {
+    x: number;
+    y: number;
+    toJson() : object;
+}
\ No newline at end of file
index d208ee64a0a9df03ac1576c362a1b90631991268..2fefad634c6818a0d9d3d1645cd10ada9cf146c8 100644 (file)
@@ -43,8 +43,8 @@
     "moduleResolution": "node",               /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */
     "baseUrl": ".",                           /* Base directory to resolve non-absolute module names. */
     "paths": {
-      "@Controller/*": ["src/Controller/*"],
-      "@Model/*": ["src/Model/*"]
+      "_Controller/*": ["src/Controller/*"],
+      "_Model/*": ["src/Model/*"]
     },                                        /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */
     // "rootDirs": [],                        /* List of root folders whose combined content represents the structure of the project at runtime. */
     // "typeRoots": [],                       /* List of folders to include type definitions from. */