Add io socket message to share user position.
authorgparant <g.parant@thecodingmachine.com>
Sat, 4 Apr 2020 10:42:02 +0000 (12:42 +0200)
committergparant <g.parant@thecodingmachine.com>
Sat, 4 Apr 2020 10:42:02 +0000 (12:42 +0200)
 - Add message 'user-position' to share position in a room.
 - Change JoinRoomMessage to MessageUserPosition to have all data to share position and user information
 - Fix error alias to build

back/.gitignore
back/src/Controller/IoSocketController.ts
back/src/Model/Websocket/JoinRoomMessage.ts [deleted file]
back/src/Model/Websocket/Message.ts [new file with mode: 0644]
back/src/Model/Websocket/MessageUserPosition.ts [new file with mode: 0644]
back/tsconfig.json

index 048e02caa7425eddc10beb9b010a75fb26263d07..ca0a17d739deff3586920665c0ff1304962c100b 100644 (file)
@@ -1,3 +1,4 @@
+/dist/
 /node_modules/
 /dist/bundle.js
 /yarn-error.log
index 8461636595ef2691337bee1eef39a2194ee5a764..7317ceb7f9e62f58a86e4274d207cc1b4ffc8ac9 100644 (file)
@@ -1,7 +1,7 @@
 import socketIO = require('socket.io');
 import {Socket} from "socket.io";
 import * as http from "http";
-import {JoinRoomMessage} from "@Model/Websocket/JoinRoomMessage";
+import {MessageUserPosition} from "@Model/Websocket/MessageUserPosition";
 
 export class IoSocketController{
     Io: socketIO.Server;
@@ -21,8 +21,14 @@ export class IoSocketController{
                     positionXUser: user x position map
                     positionYUser: user y position on map
             */
-            socket.on('join-room', (message : JoinRoomMessage) => {
+            socket.on('join-room', (message : MessageUserPosition) => {
                 socket.join(message.roomId);
+                // sending to all clients in room except sender
+                socket.to(message.roomId).emit('join-room', message.toString());
+            });
+
+            socket.on('user-position', (message : MessageUserPosition) => {
+                // sending to all clients in room except sender
                 socket.to(message.roomId).emit('join-room', message.toString());
             });
         });
diff --git a/back/src/Model/Websocket/JoinRoomMessage.ts b/back/src/Model/Websocket/JoinRoomMessage.ts
deleted file mode 100644 (file)
index 9fed9ba..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-export class JoinRoomMessage {
-    userId: string;
-    roomId: string;
-    positionXUser: string;
-    positionYUser: string;
-
-    constructor(message: string) {
-        let data = JSON.parse(message);
-        this.userId = data.userId;
-        this.roomId = data.roomId;
-        this.positionXUser = data.positionXUser;
-        this.positionYUser = data.positionYUser;
-    }
-
-    toString(){
-        return JSON.stringify({
-            userId: this.userId,
-            roomId: this.roomId,
-            positionXUser: this.positionXUser,
-            positionYUser: this.positionYUser
-        })
-    }
-}
\ No newline at end of file
diff --git a/back/src/Model/Websocket/Message.ts b/back/src/Model/Websocket/Message.ts
new file mode 100644 (file)
index 0000000..4fc340a
--- /dev/null
@@ -0,0 +1,17 @@
+export class Message {
+    userId: string;
+    roomId: string;
+
+    constructor(message: string) {
+        let data = JSON.parse(message);
+        this.userId = data.userId;
+        this.roomId = data.roomId;
+    }
+
+    toJson() {
+        return {
+            userId: this.userId,
+            roomId: this.roomId,
+        }
+    }
+}
\ No newline at end of file
diff --git a/back/src/Model/Websocket/MessageUserPosition.ts b/back/src/Model/Websocket/MessageUserPosition.ts
new file mode 100644 (file)
index 0000000..b37b508
--- /dev/null
@@ -0,0 +1,24 @@
+import {Message} from "./Message";
+
+export class MessageUserPosition extends Message{
+    positionXUser: string;
+    positionYUser: string;
+
+    constructor(message: string) {
+        super(message);
+        let data = JSON.parse(message);
+        this.positionXUser = data.positionXUser;
+        this.positionYUser = data.positionYUser;
+    }
+
+    toString() {
+        return JSON.stringify(
+            Object.assign(
+                super.toJson(),
+                {
+                    positionXUser: this.positionXUser,
+                    positionYUser: this.positionYUser
+                })
+        );
+    }
+}
\ No newline at end of file
index 9e05ddd6075d0f040d65275746d2635e2353f56c..d208ee64a0a9df03ac1576c362a1b90631991268 100644 (file)
     // "noFallthroughCasesInSwitch": true,    /* Report errors for fallthrough cases in switch statement. */
 
     /* Module Resolution Options */
-    // "moduleResolution": "node",            /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */
-    // "baseUrl": "./",                       /* Base directory to resolve non-absolute module names. */
-    "baseUrl": "src",
+    "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": ["Controller/*"],
-      "@Model": ["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. */