示例#1
0
 /// <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");
     }
   }
 }
示例#2
0
 /// <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;
     }
   }
 }