コード例 #1
0
        public void RemoveMessage(ShadowCompletionMessage message)
        {
            PeerMessageQueue peerQueue;
            if (!_savedMessages.TryGetValue(message.ToPeer, out peerQueue))
            {
                peerQueue = new PeerMessageQueue(message.ToPeer);
                _savedMessages.Add(message.ToPeer, peerQueue);

            }
            if (peerQueue[message.Endpoint].Count == 0 || peerQueue.GlobalQueue.Count == 0)
            {
                peerQueue.OutOfOrderAcks.Add(message.MessageId, message);
                return;
            }

            var item = peerQueue.GlobalQueue.Peek();
            if (item.Message.MessageIdentity != message.MessageId)
            {
                peerQueue.OutOfOrderAcks.Add(message.MessageId, message);
            }
            else
            {
                peerQueue.GlobalQueue.Dequeue();
                RemoveFromTransportQueue(message.Endpoint, message.MessageId, peerQueue);
            }
        }
コード例 #2
0
        public void SaveMessage(ShadowMessageCommand shadowMessage)
        {
            PeerMessageQueue queue;
            if (!_savedMessages.TryGetValue(shadowMessage.PrimaryRecipient, out queue))
            {
                queue = new PeerMessageQueue(shadowMessage.PrimaryRecipient);
                _savedMessages[shadowMessage.PrimaryRecipient] = queue;
            }

            if (queue.OutOfOrderAcks.Count > 0 && queue.OutOfOrderAcks.ContainsKey(shadowMessage.Message.MessageIdentity))
            {
                Console.WriteLine(string.Format("removing out of order ack {0}", shadowMessage.Message.MessageIdentity));
                queue.OutOfOrderAcks.Remove(shadowMessage.Message.MessageIdentity);
                return;
            }
            queue[shadowMessage.TargetEndpoint].Enqueue(shadowMessage);
            queue.GlobalQueue.Enqueue(shadowMessage);
        }
コード例 #3
0
 private static void RemoveFromTransportQueue(IEndpoint endpoint, Guid messageId, PeerMessageQueue peerQueue)
 {
     var item = peerQueue[endpoint].Dequeue();
     if (item.Message.MessageIdentity != messageId)
     {
         //argh, missing messages?
         Debugger.Break();
         Console.WriteLine("error when removing from queue");
     }
 }