- 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
+/dist/
/node_modules/
/dist/bundle.js
/yarn-error.log
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;
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());
});
});
+++ /dev/null
-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
--- /dev/null
+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
--- /dev/null
+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
// "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. */