= Both sides =
Add a setting to specify a 'tolerance'. The tolerance is minimum time before you take unnecessary action. For example, if a message has been sent within the last second, there is no great reason to retransmit, even if an ack has just come in without including that message. Similarly on the RMD side, there should be no reason to NACK a message instantly if a gap appears, as the missing message may be arriving concurrently.
* Always retransmit on NACK (even within tolerance) * Only retransmit if an ack has a gap * If no ack within AckReqInterval and unacknowledged messages exist, then send AckRequest * Potential optimization could be to implement a range to allow piggybacking, e.g. After AckRequestInterval, attempt to piggyback an AckRequest message within say 10s, after that send an standalone AckRequest
= RMD =
* define AnonymousAckTimeout and AddressableAckTimeout (think about MC later) * How often to ack in the presence of new messages * For example, 0 implies Ack every new message, 60s implies only send acknowledgement 60s after receiving fresh messages * If a gap is detected and InOrder is enabled, always Nack (outside tolerance) * Option to ForceNacks in other cases (e.g. not InOrder)