Beispiel #1
0
 public async Task StartResponseStream()
 {
     try
     {
         while (await _downstreamConnection.ResponseStream.MoveNext())
         {
             var response =
                 new QueuesDownstreamResponse(_downstreamConnection.ResponseStream.Current);
             HandelResponse(response);
         }
     }
     catch (Exception)
     {
         IsConnectionDropped.TrySetResult(true);
         throw;
     }
 }
Beispiel #2
0
        private void HandelResponse(QueuesDownstreamResponse response)
        {
            Task.Run(() =>
            {
                if (response.RequestTypeData == QueuesDownstreamRequestType.Get)
                {
                    PollResponse pendingResponse;
                    if (_pendingRequests.TryRemove(response.RefRequestId, out pendingResponse))
                    {
                        pendingResponse = pendingResponse.SetPollResponse(response, SendRequest);
                        if (response.Messages.Count > 0 && !response.IsError)
                        {
                            _activeResponses.TryAdd(response.TransactionId, pendingResponse);
                        }
                        else
                        {
                            pendingResponse.SendComplete();
                        }
                    }
                }
                else
                {
                    if (_activeResponses.TryGetValue(response.TransactionId, out var activeResponse))
                    {
                        if (response.TransactionComplete)
                        {
                            activeResponse.SendComplete();
                            _activeResponses.TryRemove(response.TransactionId, out activeResponse);
                            return;
                        }

                        if (response.IsError)
                        {
                            activeResponse.SendError(response.Error);
                        }
                    }
                }
            });
        }