Example #1
0
        public async Task Subscribe(EventsSubscribeRequest request, ReceiveEventsMessage messageHandler, ReceiveEventsError errorHandler, CancellationToken cancellationToken = new CancellationToken())
        {
            request.ClientId = this.ClientOptions.PopulateClientId(request.ClientId);
            request.Validate();
            if (messageHandler == null)
            {
                throw new ArgumentNullException(nameof(messageHandler), "request must have a non-null message delegate");
            }
            if (errorHandler == null)
            {
                throw new ArgumentNullException(nameof(messageHandler), "request must have a non-null error delegate");
            }

            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);
                            messageHandler(message);
                        }
                    }
                }
                catch (RpcException rpcx)
                {
                    if (rpcx.StatusCode == StatusCode.Cancelled)
                    {
                        break;
                    }
                    else
                    {
                        errorHandler(rpcx.Message);
                    }
                }
                catch (Exception e)
                {
                    errorHandler(e.Message);
                }

                await Task.Delay(ClientOptions.ReconnectInterval);
            }
        }
Example #2
0
 public async Task Subscribe(EventsSubscribeRequest[] requests, ReceiveEventsMessage messageHandler, ReceiveEventsError errorHandler, CancellationToken cancellationToken = new CancellationToken())
 {
     if (messageHandler == null)
     {
         throw new ArgumentNullException(nameof(messageHandler), "request must have a non-null message delegate");
     }
     if (errorHandler == null)
     {
         throw new ArgumentNullException(nameof(messageHandler), "request must have a non-null error delegate");
     }
     Task[] taskArray = new Task[requests.Length];
     for (int i = 0; i < requests.Length; i++)
     {
         taskArray[i] = Subscribe(requests[i], messageHandler, errorHandler, cancellationToken);
     }
     await Task.WhenAll(taskArray);
 }