public void Update() { if (NetworkClient != null && NetworkClient.Status == NetPeerStatus.Running) { NetIncomingMessage msg; while ((msg = NetworkClient.ReadMessage()) != null) { if (NetworkClient.Connections.FirstOrDefault() != null) { ping = NetworkClient.Connections.First().AverageRoundtripTime; } switch (msg.MessageType) { case NetIncomingMessageType.StatusChanged: { NetConnectionStatus status = (NetConnectionStatus)msg.ReadByte(); if (status == NetConnectionStatus.Connected) { serverHubCompatible = true; serverHubAvailable = true; NetOutgoingMessage outMsg = NetworkClient.CreateMessage(); outMsg.Write((byte)CommandType.GetRooms); NetworkClient.SendMessage(outMsg, NetDeliveryMethod.ReliableOrdered, 0); } else if (status == NetConnectionStatus.Disconnected) { try { string reason = msg.ReadString(); if (reason.Contains("Version mismatch")) { serverHubCompatible = false; serverHubAvailable = true; } else { serverHubCompatible = false; serverHubAvailable = false; } ServerHubException?.Invoke(this, new Exception("ServerHub refused connection! Reason: " + reason)); } catch (Exception e) { ServerHubException?.Invoke(this, new Exception("ServerHub refused connection! Exception: " + e)); } Abort(); } }; break; case NetIncomingMessageType.Data: { if ((CommandType)msg.ReadByte() == CommandType.GetRooms) { try { int roomsCount = msg.ReadInt32(); availableRooms.Clear(); for (int i = 0; i < roomsCount; i++) { availableRooms.Add(new RoomInfo(msg)); } availableRoomsCount = availableRooms.Count; playersCount = availableRooms.Sum(x => x.players); ReceivedRoomsList?.Invoke(this, availableRooms); }catch (Exception e) { ServerHubException?.Invoke(this, new Exception("Unable to parse rooms list! Exception: " + e)); } Abort(); } }; break; case NetIncomingMessageType.WarningMessage: Plugin.log.Warn(msg.ReadString()); break; case NetIncomingMessageType.ErrorMessage: Plugin.log.Error(msg.ReadString()); break; #if DEBUG case NetIncomingMessageType.VerboseDebugMessage: case NetIncomingMessageType.DebugMessage: Plugin.log.Info(msg.ReadString()); break; default: Console.WriteLine("Unhandled type: " + msg.MessageType); break; #endif } } } }
public void Update() { if (NetworkClient != null && NetworkClient.Status == NetPeerStatus.Running) { NetIncomingMessage msg; while ((msg = NetworkClient.ReadMessage()) != null) { switch (msg.MessageType) { case NetIncomingMessageType.StatusChanged: { NetConnectionStatus status = (NetConnectionStatus)msg.ReadByte(); if (status == NetConnectionStatus.Connected) { NetOutgoingMessage outMsg = NetworkClient.CreateMessage(); outMsg.Write((byte)CommandType.GetRooms); NetworkClient.SendMessage(outMsg, NetDeliveryMethod.ReliableOrdered, 0); } else if (status == NetConnectionStatus.Disconnected) { ServerHubException?.Invoke(this, new Exception("ServerHub refused connection!")); Abort(); } }; break; case NetIncomingMessageType.Data: { if ((CommandType)msg.ReadByte() == CommandType.GetRooms) { serverHubAvailable = true; int roomsCount = msg.ReadInt32(); availableRooms.Clear(); for (int i = 0; i < roomsCount; i++) { availableRooms.Add(new RoomInfo(msg)); } ReceivedRoomsList?.Invoke(this, availableRooms); Abort(); } }; break; case NetIncomingMessageType.VerboseDebugMessage: case NetIncomingMessageType.DebugMessage: Misc.Logger.Info(msg.ReadString()); break; case NetIncomingMessageType.WarningMessage: Misc.Logger.Warning(msg.ReadString()); break; case NetIncomingMessageType.ErrorMessage: Misc.Logger.Error(msg.ReadString()); break; default: Console.WriteLine("Unhandled type: " + msg.MessageType); break; } } } }