示例#1
0
 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.");
         }
     }
 }
示例#2
0
        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}");
                }
            }
        }