From: gparant Date: Sat, 4 Apr 2020 14:25:03 +0000 (+0200) Subject: Refactor and fix error hydration message socket io X-Git-Url: https://vcs.fsf.org/?a=commitdiff_plain;h=e8da727cae4037ec9b13326ae2f2bf754f52cfbc;p=libreadventure.git Refactor and fix error hydration message socket io - 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. --- diff --git a/back/src/Controller/IoSocketController.ts b/back/src/Controller/IoSocketController.ts index abc5210..fba029b 100644 --- a/back/src/Controller/IoSocketController.ts +++ b/back/src/Controller/IoSocketController.ts @@ -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 diff --git a/back/src/Model/Websocket/ExSocketInterface.ts b/back/src/Model/Websocket/ExSocketInterface.ts index 6adcb47..51df925 100644 --- a/back/src/Model/Websocket/ExSocketInterface.ts +++ b/back/src/Model/Websocket/ExSocketInterface.ts @@ -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 diff --git a/back/src/Model/Websocket/MessageUserPosition.ts b/back/src/Model/Websocket/MessageUserPosition.ts index b37b508..663ce71 100644 --- a/back/src/Model/Websocket/MessageUserPosition.ts +++ b/back/src/Model/Websocket/MessageUserPosition.ts @@ -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 index 0000000..7f2ab39 --- /dev/null +++ b/back/src/Model/Websocket/PointInterface.ts @@ -0,0 +1,5 @@ +export interface PointInterface { + x: number; + y: number; + toJson() : object; +} \ No newline at end of file diff --git a/back/tsconfig.json b/back/tsconfig.json index d208ee6..2fefad6 100644 --- a/back/tsconfig.json +++ b/back/tsconfig.json @@ -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. */