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";
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
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() {
Object.assign(
super.toJson(),
{
- positionXUser: this.positionXUser,
- positionYUser: this.positionYUser
+ position: this.position.toJson()
})
);
}
"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. */