public override bool CheckForMessages() { CheckClients(); var received = new List <NetIncomingMessage>(); Peer.ReadMessages(received); foreach (var msg in received) { var client = GetClient(msg.SenderConnection); switch (msg.MessageType) { case NetIncomingMessageType.VerboseDebugMessage: case NetIncomingMessageType.DebugMessage: Log(LogType.Log, msg.ReadString()); break; case NetIncomingMessageType.WarningMessage: Log(LogType.Warning, msg.ReadString()); break; case NetIncomingMessageType.ErrorMessage: Log(LogType.Error, msg.ReadString()); break; case NetIncomingMessageType.StatusChanged: var status = (NetConnectionStatus)msg.ReadByte(); var reason = msg.ReadString(); if (status == NetConnectionStatus.Disconnected) { client.DisconnectMessage = reason; } Log(LogType.Log, "New status: {0} (Reason: {1})", status, reason); break; case NetIncomingMessageType.Data: try { _readerStream.ClearWriteReset(x => x.Write(msg.Data, 0, msg.LengthBytes)); var value = MessageTable.Deserialize(_readerStream); HandleMessage(client, value); } catch (Exception e) { Log(LogType.Error, e.ToString()); } break; default: Log(LogType.Error, "Unhandled type: {0}", msg.MessageType); break; } } Peer.Recycle(received); return(received.Count > 0); }