private void NotifyTimeout(WaitForMessageRequest request) { lock (_lock) { if (_registeredMessageExceptions.Contains(request)) { // resend with fire and forget semantic as expectation already registered. _communicator.SendMessage(request.Request); _log.Info($"retrying message to port {request.Request.Port} / channel {request.Request.Channel}"); } else { // already removed, so no need to retry. _log.Info($"timout with no matching request to port {request.Request.Port} / channel {request.Request.Channel}. Ignore."); } } }
private void CheckExceptedAnswer(CrtpMessage message) { WaitForMessageRequest foundRequest = null; lock (_lock) { foreach (var expectation in _registeredMessageExceptions) { if (expectation.IsSatisfiedBy(message)) { foundRequest = expectation; break; } } if (foundRequest != null) { // stop retry timer. foundRequest.Dispose(); _registeredMessageExceptions.Remove(foundRequest); _log.Debug($"received expected message for port {foundRequest.Request.Port} / channel: {foundRequest.Request.Channel}"); } } }