Пример #1
0
 public async Task Subscribe(EventsSubscribeRequest[] requests, IEventsReceiveCallback handler,
                             CancellationToken cancellationToken = new CancellationToken())
 {
     if (handler == null)
     {
         throw new ArgumentNullException(nameof(handler), "request must have a non-null handler");
     }
     Task[] taskArray = new Task[requests.Length];
     for (int i = 0; i < requests.Length; i++)
     {
         taskArray[i] = Subscribe(requests[i], handler, cancellationToken);
     }
     await Task.WhenAll(taskArray);
 }
Пример #2
0
        public async Task Subscribe(EventsSubscribeRequest request, IEventsReceiveCallback handler,
                                    CancellationToken cancellationToken = new CancellationToken())
        {
            request.ClientId = this.ClientOptions.PopulateClientId(request.ClientId);
            request.Validate();
            if (handler == null)
            {
                throw new ArgumentNullException(nameof(handler), "request must have a non-null handler");
            }
            while (true)
            {
                try
                {
                    using (var call = Client.SubscribeToEvents(request.ToSubscribeRequest(),
                                                               ClientOptions.GetGrpcMetadata(),
                                                               null, cancellationToken))
                    {
                        while (await call.ResponseStream.MoveNext())
                        {
                            EventsReceiveMessage message = new EventsReceiveMessage(call.ResponseStream.Current);
                            handler.ReceiveEventsMessage(message);
                        }
                    }
                }
                catch (RpcException rpcx)
                {
                    if (rpcx.StatusCode == StatusCode.Cancelled)
                    {
                        break;
                    }
                    else
                    {
                        handler.ReceiveEventsError(rpcx.Message);
                    }
                }
                catch (Exception e)
                {
                    handler.ReceiveEventsError(e.Message);
                }

                await Task.Delay(ClientOptions.ReconnectInterval);
            }
        }