示例#1
0
        public virtual Message Receive()
        {
            lock (this) if (buffer.Count > 0)
                {
                    return(buffer.Pop());
                }
            if (IsLocal)
            {
                if (Role == Roles.Client)
                {
                    return(client.Dequeue());
                }
                else
                {
                    return(server.Dequeue());
                }
            }
            var len = reader.ReadInt32();
            var buf = new byte[len];

            //while (socket.Available <= 0) System.Threading.Thread.Sleep(10);
            reader.Read(buf, 0, len);
            var m   = new MemoryStream(buf);
            var msg = (Message)serializer.Deserialize(m);

            if (msg == null)
            {
                throw new InvalidOperationException("Message must not be null.");
            }
            if (!msg.CheckSecurityToken(this))
            {
                SendAsync(new StatusMessage(Commands.InvalidPassword));
                MonoDebugServer.InvalidPassword();
            }
            if (msg is IExtendedMessage)
            {
                ((IExtendedMessage)msg).Receive(this);
            }
            return(msg);
        }