Exemplo n.º 1
0
 public UserMessagesQueue AddMessageToQueue(UserMessage message)
 {
     ulong desiredStartPacketIndex = message.PacketIndex - message.UserPacketIndex;
     UserMessagesQueue queue;
     lock (this)
     {
         if (Queues == null)
             Queues = new UserMessagesQueuesSet();
         queue = Queues.GetQueue(desiredStartPacketIndex, message.UserPacketsCount);
         queue.Messages[message.UserPacketIndex] = message;
     }
     return queue;
 }
Exemplo n.º 2
0
 private void ProcessMessage(UserMessage message)
 {
     Neighbor neighbor;
     var messages = ApplyMessageBuffer(message, out neighbor);
     if (messages != null)
         foreach (var msg in messages)
         {
             var userMessage = (UserMessage)msg;
             if (userMessage.UserPacketsCount > 1)
             {
                 var queue = neighbor.AddMessageToQueue(message);
                 if (queue.QueueReady)
                 {
                     var queueMessages = neighbor.ExtractMessagesFromQueue(queue);
                     var buffer = new byte[queueMessages.Sum(u => u.UserData.Length)];
                     int offset = 0;
                     foreach (var queueMessage in queueMessages)
                     {
                         queueMessage.UserData.CopyTo(buffer, offset);
                         offset += queueMessage.UserData.Length;
                     }
                     OnUserMessageReceived(buffer);
                 }
             }
             else
                 OnUserMessageReceived(((UserMessage)msg).UserData);
         }
 }