public void Confirm(AckFrame ackFrame)
        {
            var sequenceNumber = ackFrame.SequenceNumber;

            lock (_framesToAck)
            {
                while (_framesToAck.Count > 0)
                {
                    var item = _framesToAck.Dequeue();
                    if (item.Frame.SequenceNumber == sequenceNumber)
                    {
                        break;
                    }
                }

                var msgsToAck = Math.Min(Threshold, _framesToAck.Count);
                if (msgsToAck == 0)
                {
                    return;
                }

                for (var i = 0; i < msgsToAck; i++)
                {
                    _sendCounter++;
                    _framesToAck[i].MarkAsSent();
                    _deliverMessageMethod(_framesToAck[i].Frame);
                }
            }
        }
示例#2
0
        public int Confirm(AckFrame ackFrame)
        {
            int frameCount     = 0;
            var sequenceNumber = ackFrame.SequenceNumber;

            lock (_framesToAck)
            {
                while (_framesToAck.Count > 0)
                {
                    var item = _framesToAck.Dequeue();
                    ++frameCount;
                    if (item.Frame.SequenceNumber == sequenceNumber)
                    {
                        break;
                    }
                }

                var msgsToAck = Math.Min(_messagesPerAck, _framesToAck.Count);
                if (msgsToAck == 0)
                {
                    return(frameCount);
                }

                for (var i = 0; i < msgsToAck; i++)
                {
                    _framesToAck[i].MarkAsSent();
                    _deliverMessageMethod(_framesToAck[i].Frame);
                }
            }

            return(frameCount);
        }
 public void Confirm(AckFrame ackFrame)
 {
     lock (_syncLock)
     {
         //TODO: Add a sanity check for the sequence number (supporting wrapping numbers)
         _pendingFrame = null;
     }
 }
 public void AckFrame(MessageFrame frame)
 {
     var ack = new AckFrame(_ackExtensionId, frame.SequenceNumber);
     _connection.Send(ack);
 }