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); } } }
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); }