private void MessagingTick() { foreach (ConcurrentQueue <IncomingServerSessionMessage> incomingMessage in this._incomingMessages) { int count = incomingMessage.Count; for (int peerNo = 0; peerNo < count; ++peerNo) { IncomingServerSessionMessage result = (IncomingServerSessionMessage)null; incomingMessage.TryDequeue(out result); ServersideSession peer = result.Peer; NetworkMessage networkMessage = result.NetworkMessage; try { networkMessage.BeginRead(); byte id = networkMessage.ReadByte(); if (!peer.ContainsMessageHandler(id)) { networkMessage.ResetRead(); peer.OnMessageReceived((INetworkMessageReader)networkMessage); } else { MessageContract messageContract = MessageContract.CreateMessageContract(peer.GetMessageContractType(id)); messageContract.DeserializeFromNetworkMessage((INetworkMessageReader)networkMessage); peer.HandleMessage(messageContract); } } catch (Exception ex) { this.RemovePeer(peerNo); } } } }
internal void AddIncomingMessage(IncomingServerSessionMessage incomingMessage) => this._incomingMessages[incomingMessage.Peer.Index % this._readWriteThreadCount].Enqueue(incomingMessage);