protected virtual void Dispose(bool disposing) { if (!disposing) return; world.ServerLink.MessageReceivedEvent -= HandleReceivedMessage; foreach (RemotePlayer remotePlayer in remotePlayers.Values) remotePlayer.Dispose(); remotePlayers.Clear(); if (localPlayer != null) { localPlayer.Dispose(); localPlayer = null; } }
private void HandleReceivedMessage(object sender, ServerLinkMessageEvent message) { switch (message.MessageType) { case MessageType.MsgAddPlayer: { MsgAddPlayerPacket packet = (MsgAddPlayerPacket)message.MessageData; if (message.ServerLinkStatus == NetServerLinkStatus.Connected) world.Console.WriteLine(String.Format("{0} has joined the {1}", packet.Player.Callsign, packet.Player.Team)); else if (message.ServerLinkStatus == NetServerLinkStatus.GettingState) world.Console.WriteLine(String.Format("{0} is on the {1}", packet.Player.Callsign, packet.Player.Team)); if (!packet.AddMyself) AddPlayer(packet.Player); else localPlayer = new LocalPlayer(world, packet.Player); break; } case MessageType.MsgRemovePlayer: { MsgRemovePlayerPacket packet = (MsgRemovePlayerPacket)message.MessageData; world.Console.WriteLine(String.Format("{0} has left the server ({1})", GetPlayerBySlot(packet.Slot).Callsign, packet.Reason)); RemovePlayer(packet.Slot); break; } default: break; } }