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