示例#1
0
 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);
             }
         }
     }
 }
示例#2
0
 internal void AddIncomingMessage(IncomingServerSessionMessage incomingMessage) => this._incomingMessages[incomingMessage.Peer.Index % this._readWriteThreadCount].Enqueue(incomingMessage);