public void ProcessNetworkMessages()
{
NetIncomingMessage im; //Holder for the incoming message
while ((im = NetManager.ReadMessage()) != null)
{
Debug.WriteLine(im.ToString());
switch (im.MessageType)
{
case NetIncomingMessageType.VerboseDebugMessage:
case NetIncomingMessageType.DebugMessage:
case NetIncomingMessageType.WarningMessage:
case NetIncomingMessageType.ErrorMessage:
Debug.WriteLine(im.ToString());
break;
case NetIncomingMessageType.StatusChanged:
switch ((NetConnectionStatus)im.ReadByte())
{
//When connected to the server
case NetConnectionStatus.Connected:
{
Debug.WriteLine("{0} Connected", im.SenderEndPoint);
//Once connected, switch to the lobby screen
MainWindow.ScreenManager.SwitchScreen(new LobbyScreen());
Game.CurrentGameState = GameState.Lobby;
break;
}
//When disconnected from the server
case NetConnectionStatus.Disconnected:
{
Debug.WriteLine("{0} Disconnected", im.SenderEndPoint);
if (Game.CurrentGameState != GameState.Login)
{
Game.CurrentGameState = GameState.Login;
if (Game.CurrentGameState == GameState.Game)
{
(MainWindow.ScreenManager.Current as GameScreen).SystemChat("Server connection disconnected.");
(MainWindow.ScreenManager.Current as GameScreen).StatsLabel.Text = "Status: Disconnected.";
}
}
else
{
string reason = im.ReadString();
if (string.IsNullOrWhiteSpace(reason)) //Disconnect
{
if (MainWindow.ScreenManager.Current is LoginScreen)
(MainWindow.ScreenManager.Current as LoginScreen).Login.Disconnected("Could not connect to server.", "[color:Gold]Error[/color]");
}
else //Denied/Kicked/Server Shut Down
{
string[] reasons = reason.Split(':');
if (MainWindow.ScreenManager.Current is LoginScreen)
(MainWindow.ScreenManager.Current as LoginScreen).Login.Disconnected(reasons[0], reasons[1]);
}
}
}
break;
case NetConnectionStatus.RespondedAwaitingApproval:
im.SenderConnection.Approve(NetManager.CreateMessage());
break;
}
break;
case NetIncomingMessageType.Data:
HandleDataMessage(im);
break;
}
NetManager.Recycle(im);
}
}