From 4e1115725b1db58787bbf575918e5fd8e437506e Mon Sep 17 00:00:00 2001 From: gparant Date: Sat, 4 Apr 2020 12:42:02 +0200 Subject: [PATCH] Add io socket message to share user position. - 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 | 1 + back/src/Controller/IoSocketController.ts | 10 ++++++-- back/src/Model/Websocket/JoinRoomMessage.ts | 23 ------------------ back/src/Model/Websocket/Message.ts | 17 +++++++++++++ .../Model/Websocket/MessageUserPosition.ts | 24 +++++++++++++++++++ back/tsconfig.json | 9 ++++--- 6 files changed, 54 insertions(+), 30 deletions(-) delete mode 100644 back/src/Model/Websocket/JoinRoomMessage.ts create mode 100644 back/src/Model/Websocket/Message.ts create mode 100644 back/src/Model/Websocket/MessageUserPosition.ts diff --git a/back/.gitignore b/back/.gitignore index 048e02ca..ca0a17d7 100644 --- a/back/.gitignore +++ b/back/.gitignore @@ -1,3 +1,4 @@ +/dist/ /node_modules/ /dist/bundle.js /yarn-error.log diff --git a/back/src/Controller/IoSocketController.ts b/back/src/Controller/IoSocketController.ts index 84616365..7317ceb7 100644 --- a/back/src/Controller/IoSocketController.ts +++ b/back/src/Controller/IoSocketController.ts @@ -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 index 9fed9ba8..00000000 --- a/back/src/Model/Websocket/JoinRoomMessage.ts +++ /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 index 00000000..4fc340a6 --- /dev/null +++ b/back/src/Model/Websocket/Message.ts @@ -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 index 00000000..b37b5089 --- /dev/null +++ b/back/src/Model/Websocket/MessageUserPosition.ts @@ -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 diff --git a/back/tsconfig.json b/back/tsconfig.json index 9e05ddd6..d208ee64 100644 --- a/back/tsconfig.json +++ b/back/tsconfig.json @@ -40,12 +40,11 @@ // "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. */