/// <summary> /// /// </summary> /// <param name="playerinfo"></param> public vxNetmsgUpdateSessionStatus(vxEnumSessionStatus status) { SessionStatus = status; }
/// <summary> /// Constructor. /// </summary> public vxNetClientEventSessionStatusUpdated(vxEnumSessionStatus oldStatus, vxEnumSessionStatus newStatus) { NewSessionStatus = newStatus; PreviousSessionStatus = oldStatus; }
/// <summary> /// Method for Receiving Messages kept in a Global Scope for the Engine. /// </summary> /// <param name="peer">Peer.</param> public void ClientMsgCallback(object peer) { NetIncomingMessage im; while ((im = this.Client.ReadMessage()) != null) { switch (im.MessageType) { case NetIncomingMessageType.VerboseDebugMessage: case NetIncomingMessageType.DebugMessage: case NetIncomingMessageType.WarningMessage: case NetIncomingMessageType.ErrorMessage: //LogClient("DEBUG: " + im.ReadString()); break; /**************************************************************/ //DiscoveryResponse /**************************************************************/ case NetIncomingMessageType.DiscoveryResponse: LogClient(" ------- Server found at: " + im.SenderEndPoint); //Fire the RecieveDiscoverySignalResponse Event by passing down the decoded Network Message if (DiscoverySignalResponseRecieved != null) { DiscoverySignalResponseRecieved(this, new vxNetClientEventDiscoverySignalResponse(new vxNetmsgServerInfo(im))); } break; case NetIncomingMessageType.StatusChanged: switch ((NetConnectionStatus)im.ReadByte()) { case NetConnectionStatus.Connected: { LogClient(string.Format("{0} Connected", im.SenderEndPoint)); //Fire the Connected Event if (Connected != null) { Connected(this, new vxNetClientEventConnected()); } } break; case NetConnectionStatus.Disconnected: { LogClient(string.Format("{0} Disconnected", im.SenderEndPoint)); //Fire the Connected Event if (Disconnected != null) { Disconnected(this, new vxNetClientEventDisconnected()); } } break; default: LogClient(im.ReadString()); break; } break; case NetIncomingMessageType.Data: var gameMessageType = (vxNetworkMessageTypes)im.ReadByte(); switch (gameMessageType) { case vxNetworkMessageTypes.UpdatePlayersList: //Get the Message Containing the Updated Player List var updatedPlayerList = new vxNetmsgUpdatePlayerList(im); //Now Loop through each player in the list foreach (vxNetPlayerInfo serverPlayer in updatedPlayerList.Players) { //First Check if the Server Player is in the clients list. If not, then add the server player to the clients list. if (PlayerManager.Contains(serverPlayer)) { PlayerManager.Players[serverPlayer.ID] = serverPlayer; } else { //Add Player to Player manager PlayerManager.Add(serverPlayer); //Now Fire the Event Handler if (OtherPlayerConnected != null) { OtherPlayerConnected(this, new vxNetClientEventPlayerConnected(serverPlayer)); } } } break; case vxNetworkMessageTypes.PlayerDisconnected: //For what ever reason, a player has disconnected, so we need to remove it from the player list //Send a message to all clients to remove this client from their list. var rmvMsg = new vxNetmsgRemovePlayer(im); //Fire the Connected Event if (OtherPlayerDisconnected != null) { OtherPlayerDisconnected(this, new vxNetClientEventPlayerDisconnected(rmvMsg.PlayerInfo)); } //Finally remove the player from the server's list if (PlayerManager.Players.ContainsKey(rmvMsg.PlayerInfo.ID)) { PlayerManager.Players.Remove(rmvMsg.PlayerInfo.ID); } break; case vxNetworkMessageTypes.UpdatePlayerLobbyStatus: //Decode the list var updatePlayerState = new vxNetmsgUpdatePlayerLobbyStatus(im); //Update the internal server list PlayerManager.Players[updatePlayerState.PlayerInfo.ID] = updatePlayerState.PlayerInfo; if (UpdatedPlayerInfoRecieved != null) { UpdatedPlayerInfoRecieved(this, new vxNetClientEventPlayerStatusUpdate(updatePlayerState.PlayerInfo)); } break; case vxNetworkMessageTypes.SessionStatus: //Get Old Status for information vxEnumSessionStatus oldStatus = this.SessionStatus; var newSessionStatus = new vxNetmsgUpdateSessionStatus(im); //Set the new Session Status this.SessionStatus = newSessionStatus.SessionStatus; //Fire any connected events if (UpdateSessionStatus != null) { UpdateSessionStatus(this, new vxNetClientEventSessionStatusUpdated(oldStatus, this.SessionStatus)); } break; case vxNetworkMessageTypes.UpdatePlayerEntityState: //First decode the message var updatePlayerEntityState = new vxNetmsgUpdatePlayerEntityState(im); var timeDelay = (float)(NetTime.Now - im.SenderConnection.GetLocalTime(updatePlayerEntityState.MessageTime)); //Console.WriteLine("Client:" + timeDelay); //Only set the information if it isn't our own info if (this.PlayerInfo.ID != updatePlayerEntityState.PlayerInfo.ID) { //Then Update the Player in the client List PlayerManager.Players[updatePlayerEntityState.PlayerInfo.ID] = updatePlayerEntityState.PlayerInfo; //Then fire any connected events if (UpdatePlayerEntityState != null) { UpdatePlayerEntityState(this, new vxNetClientEventPlayerStateUpdate(updatePlayerEntityState, timeDelay)); } } break; case vxNetworkMessageTypes.RemoveItem: break; case vxNetworkMessageTypes.Other: break; } break; } Recycle(im); } }