private void Receive() { while (this.m_started) { this.m_receiveResetEvent.WaitOne(); while (this.m_receiveQueue.TryDequeue(out ServerMessage message)) { try { switch (message.GetMessageCategory()) { case ServerMessageCategory.ACCOUNT: this.m_messageManager.OnReceiveAccountMessage((ServerAccountMessage)message); break; case ServerMessageCategory.REQUEST: this.m_messageManager.OnReceiveRequestMessage((ServerRequestMessage)message); break; case ServerMessageCategory.SESSION: this.m_messageManager.OnReceiveSessionMessage((ServerSessionMessage)message); break; case ServerMessageCategory.RESPONSE: ServerRequestManager.ResponseReceived((ServerResponseMessage)message); break; case ServerMessageCategory.CORE: if (!ServerMessageManager.ReceiveCoreMessage((ServerCoreMessage)message)) { this.m_messageManager.OnReceiveCoreMessage((ServerCoreMessage)message); } break; default: Logging.Error("ServerMessageHandler.receive: unknown message category: " + message.GetMessageCategory()); break; } } catch (Exception exception) { Logging.Warning("ServerMessageHandler.receive: exception when the handle of message type " + message.GetMessageType() + ", trace: " + exception); } } } }