When sharing user position, only position is sent now!
authorDavid Négrier <d.negrier@thecodingmachine.com>
Fri, 15 May 2020 21:40:05 +0000 (23:40 +0200)
committerDavid Négrier <d.negrier@thecodingmachine.com>
Fri, 15 May 2020 21:47:00 +0000 (23:47 +0200)
back/src/Controller/IoSocketController.ts
front/src/Connexion.ts
front/src/Phaser/Game/GameManager.ts
front/src/Phaser/Game/GameScene.ts
front/src/Phaser/Player/Player.ts

index 459fd5f25a9e167f25981caa19ba86f9f1d1d7cd..2c83a8b5f226a4d61e5ee6216e303fb4630e168a 100644 (file)
@@ -11,7 +11,6 @@ import {World} from "../Model/World";
 import {Group} from "_Model/Group";
 import {UserInterface} from "_Model/UserInterface";
 import {SetPlayerDetailsMessage} from "_Model/Websocket/SetPlayerDetailsMessage";
-import {MessageUserPositionInterface} from "../../../front/src/Connexion";
 
 enum SockerIoEvent {
     CONNECTION = "connection",
@@ -133,15 +132,15 @@ export class IoSocketController {
 
             socket.on(SockerIoEvent.USER_POSITION, (message: any) => {
                 try {
-                    let messageUserPosition = this.hydrateMessageReceive(message);
-                    if (messageUserPosition instanceof Error) {
-                        return socket.emit(SockerIoEvent.MESSAGE_ERROR, {message: messageUserPosition.message});
+                    let position = this.hydratePositionReceive(message);
+                    if (position instanceof Error) {
+                        return socket.emit(SockerIoEvent.MESSAGE_ERROR, {message: position.message});
                     }
 
                     let Client = (socket as ExSocketInterface);
 
                     // sending to all clients in room except sender
-                    this.saveUserInformation(Client, messageUserPosition);
+                    Client.position = position;
 
                     //refresh position of all user in all rooms in real time
                     this.refreshUserPosition(Client);
@@ -345,15 +344,6 @@ export class IoSocketController {
         });
     }
 
-    //permit to save user position in socket
-    saveUserInformation(socket: ExSocketInterface, message: MessageUserPosition) {
-        socket.position = message.position;
-        socket.roomId = message.roomId;
-        //socket.userId = message.userId;
-        socket.name = message.name;
-        socket.character = message.character;
-    }
-
     refreshUserPosition(Client : ExSocketInterface) {
         //refresh position of all user in all rooms in real time
         let rooms = (this.Io.sockets.adapter.rooms as ExtRoomsInterface);
@@ -369,7 +359,7 @@ export class IoSocketController {
             position: Client.position,
             name: Client.name,
             character: Client.character,
-        } as MessageUserPositionInterface;
+        };
         let messageUserPosition = new MessageUserPosition(data);
         let world = this.Worlds.get(messageUserPosition.roomId);
         if (!world) {
@@ -380,9 +370,12 @@ export class IoSocketController {
     }
 
     //Hydrate and manage error
-    hydrateMessageReceive(message: string): MessageUserPosition | Error {
+    hydratePositionReceive(message: any): Point | Error {
         try {
-            return new MessageUserPosition(message);
+            if (!message.x || !message.y || !message.direction) {
+                return new Error("invalid point message sent");
+            }
+            return new Point(message.x, message.y, message.direction);
         } catch (err) {
             //TODO log error
             return new Error(err);
index 529717526609a76a29d8394c36d0e60ea4637325..da666b8bc8997e6f3cf8283fd10e47b8e5d718d6 100644 (file)
@@ -149,7 +149,7 @@ export class Connexion implements ConnexionInterface {
 
     GameManager: GameManager;
 
-    lastPositionShared: MessageUserPosition = null;
+    lastPositionShared: PointInterface = null;
     lastRoom: string|null = null;
 
     constructor(GameManager: GameManager) {
@@ -185,26 +185,6 @@ export class Connexion implements ConnexionInterface {
      * @param character
      */
     connectSocketServer(): Promise<ConnexionInterface>{
-        //if try to reconnect with last position
-        if(this.lastRoom) {
-            //join the room
-            this.joinARoom(
-                this.lastRoom
-            );
-        }
-
-        if(this.lastPositionShared) {
-
-            //share your first position
-            this.sharePosition(
-                this.lastPositionShared ? this.lastPositionShared.position.x : 0,
-                this.lastPositionShared ? this.lastPositionShared.position.y : 0,
-                this.lastPositionShared.character,
-                this.lastPositionShared.roomId,
-                this.lastPositionShared.position.direction
-            );
-        }
-
         //listen event
         this.positionOfAllUser();
         this.disconnectServer();
@@ -219,6 +199,25 @@ export class Connexion implements ConnexionInterface {
             } as SetPlayerDetailsMessage, (id: string) => {
                 this.userId = id;
             });
+
+            //if try to reconnect with last position
+            if(this.lastRoom) {
+                //join the room
+                this.joinARoom(
+                    this.lastRoom
+                );
+            }
+
+            if(this.lastPositionShared) {
+
+                //share your first position
+                this.sharePosition(
+                    this.lastPositionShared ? this.lastPositionShared.x : 0,
+                    this.lastPositionShared ? this.lastPositionShared.y : 0,
+                    this.lastPositionShared.direction
+                );
+            }
+
             resolve(this);
         });
     }
@@ -252,19 +251,13 @@ export class Connexion implements ConnexionInterface {
      * @param roomId
      * @param direction
      */
-    sharePosition(x : number, y : number, character : string, roomId : string, direction : string = "none") : void{
+    sharePosition(x : number, y : number, direction : string = "none") : void{
         if(!this.socket){
             return;
         }
-        let messageUserPosition = new MessageUserPosition(
-            this.userId,
-            roomId,
-            new Point(x, y, direction),
-            this.name,
-            character
-        );
-        this.lastPositionShared = messageUserPosition;
-        this.socket.emit(EventMessage.USER_POSITION, messageUserPosition);
+        let point = new Point(x, y, direction);
+        this.lastPositionShared = point;
+        this.socket.emit(EventMessage.USER_POSITION, point);
     }
 
     /**
index 1728d0d94c5413adf4a40e6087d2ebcb9f8de86b..a84653cd9e6323a8ed4af05ac576f17fb9bd5130 100644 (file)
@@ -17,7 +17,6 @@ export interface HasMovedEvent {
     direction: string;
     x: number;
     y: number;
-    character: string;
 }
 
 export interface MapObject {
@@ -71,8 +70,8 @@ export class GameManager {
         this.status = StatusGameManagerEnum.CURRENT_USER_CREATED;
     }
 
-    joinRoom(sceneKey : string, character: string){
-        this.ConnexionInstance.joinARoom(sceneKey, character);
+    joinRoom(sceneKey : string){
+        this.ConnexionInstance.joinARoom(sceneKey);
     }
 
     /**
@@ -128,7 +127,7 @@ export class GameManager {
     }
 
     pushPlayerPosition(event: HasMovedEvent) {
-        this.ConnexionInstance.sharePosition(event.x, event.y, event.character, this.currentGameScene.scene.key, event.direction);
+        this.ConnexionInstance.sharePosition(event.x, event.y, event.direction);
     }
 
     loadMap(mapUrl: string, scene: ScenePlugin): string {
index 1e4d1e6e7e869a1b9a6f1b9119cf2f3b6a64c475..56c775ed916edcd030cccd6d069a737cee25db7d 100644 (file)
@@ -284,7 +284,7 @@ export class GameScene extends Phaser.Scene implements GameSceneInterface, Creat
         this.createCollisionObject();
 
         //join room
-        this.GameManager.joinRoom(this.scene.key, this.CurrentPlayer.PlayerTexture);
+        this.GameManager.joinRoom(this.scene.key);
 
         //listen event to share position of user
         this.CurrentPlayer.on(hasMovedEventName, this.pushPlayerPosition.bind(this))
index dd33bd3cb5f3450ba2962874fb3ad051a2536b56..73aad77edb770320bcfee85ee3b2248826925731 100644 (file)
@@ -81,12 +81,12 @@ export class Player extends PlayableCaracter implements CurrentGamerInterface, G
         }
         if (x !== 0 || y !== 0) {
             this.move(x, y);
-            this.emit(hasMovedEventName, {direction, x: this.x, y: this.y, character: this.PlayerTexture});
+            this.emit(hasMovedEventName, {direction, x: this.x, y: this.y});
         } else {
             if (this.previousMove !== PlayerAnimationNames.None) {
                 direction = PlayerAnimationNames.None;
                 this.stop();
-                this.emit(hasMovedEventName, {direction, x: this.x, y: this.y, character: this.PlayerTexture});
+                this.emit(hasMovedEventName, {direction, x: this.x, y: this.y});
             }
         }