/// <summary> /// Handles messages received from the server /// </summary> private void HandleClientMessages() { string[] message; while ((message = client.GetServerMessage()) != null) { int position = 1; MessageType mt = Network.GetMessageType(message); switch (mt) { case MessageType.GameState: GameState oldState = currentClientGameState; GameState newState = currentClientGameState = (GameState)int.Parse(message[position++]); //Network.AddMessage("Changing game state from " + oldState + " to " + newState); switch (newState) { case GameState.INVALID: break; case GameState.NotConnected: case GameState.Lobby: case GameState.Starting: game = null; player = null; break; case GameState.Started: SwitchToGameScreen(game); return; default: break; } break; case MessageType.SettingsUpdate: width = int.Parse(message[position++]); height = int.Parse(message[position++]); unitCap = int.Parse(message[position++]); break; case MessageType.GameTransfer: game = new WildmenGame(); game.Deserialize(mt, message, ref position, game); game.SendData = client.StartSend; game.ReceiveData = client.GetServerMessage; break; case MessageType.PlayerAssign: Debug.Assert(game != null); int playerId = int.Parse(message[position++]); player = game.Players.First(p => p.Id == playerId); break; default: throw new Exception("Invalid message type"); } } }
/// <summary> /// Handles messages from server /// </summary> private void HandleClientMessages() { string[] message; while ((message = client.GetServerMessage()) != null) { int position = 1; MessageType mt = Network.GetMessageType(message); switch (mt) { case MessageType.GameState: GameState oldState = currentClientGameState; GameState newState = currentClientGameState = (GameState)int.Parse(message[position++]); Network.AddMessage("Changing game state from " + oldState + " to " + newState); switch (newState) { case GameState.INVALID: break; case GameState.NotConnected: case GameState.Lobby: sm.SwitchScreen("main"); return; case GameState.Starting: if (mapUI != null) mapUI.Dispose(); if (game != null) game.Dispose(); mapUI = null; game = null; player = null; return; case GameState.Started: return; case GameState.Finished: sm.CallSubscreen("escapemenu", client, server, player); return; default: break; } break; case MessageType.GameTransfer: game = new WildmenGame(); game.Deserialize(mt, message, ref position, game); game.SendData = client.StartSend; game.ReceiveData = client.GetServerMessage; MakeMapUI(game); break; case MessageType.PlayerAssign: Debug.Assert(game != null); int playerId = int.Parse(message[position++]); player = game.Players.First(p => p.Id == playerId); mapUI.AssignControllingPlayer(player); break; default: messageQueue.Enqueue(message); break; } } }