Ejemplo n.º 1
0
 public override Task <Unsubscription> Unsubscribe(Subscription request, ServerCallContext context)
 {
     SubscriberWritersMap.Remove(request.Id);
     return(Task.FromResult(new Unsubscription()
     {
         Id = request.Id
     }));
 }
Ejemplo n.º 2
0
        public override async Task Subscribe(SubscriptionRequest request, IServerStreamWriter <Event> responseStream, ServerCallContext context)
        {
            SubscriberWritersMap.SetStream(request.Id, request.Type, responseStream);

            while (SubscriberWritersMap.Count > 0)
            {
                var @event = await EventsBuffer.ReceiveAsync();

                foreach (var x in SubscriberWritersMap[request.Type])
                {
                    try { await x.WriteAsync(@event); }
                    catch { SubscriberWritersMap.Remove(request.Id); }
                }
            }
        }
Ejemplo n.º 3
0
        public override async Task Subscribe(Subscription subscription, IServerStreamWriter <Event> responseStream, ServerCallContext context)
        {
            //Dict to hold a streamWriter for each subscriber.
            SubscriberWritersMap[subscription.Id] = responseStream;

            while (SubscriberWritersMap.Count > 0)
            {
                //Wait on BufferBlock from MS Dataflow package.
                var subscriptionEvent = await _buffer.ReceiveAsync();

                if (SubscriberWritersMap.ContainsKey(subscriptionEvent.SubscriptionId))
                {
                    await SubscriberWritersMap[subscriptionEvent.SubscriptionId].WriteAsync(subscriptionEvent.Event);
                }
            }
        }
Ejemplo n.º 4
0
 public override Task <IsSubscribedResponse> IsSubscribed(IsSubscribedRequest request, ServerCallContext context)
 {
     return(Task.FromResult(new IsSubscribedResponse {
         Subscribed = SubscriberWritersMap.ContainsKey(request.Id)
     }));
 }
Ejemplo n.º 5
0
 public override Task <UnsubscriptionRequest> Unsubscribe(UnsubscriptionRequest request, ServerCallContext context)
 {
     SubscriberWritersMap.Remove(request.Id);
     return(Task.FromResult(request));
 }