public void SubscribeToStream(string streamName, Type feedClass, int feedPayload, int feedInterval, string feedDefaultId) { var clientContext = Context.ClientContext; clientContext.WhenClosing(UnsubscribeRequest()); var correlationId = Context.Request.HeaderValueOr(RequestHeader.XCorrelationID, string.Empty); var subscriber = new SseSubscriber( streamName, new SseClient(clientContext), correlationId, Context.Request.HeaderValueOr(RequestHeader.LastEventID, string.Empty)); PublisherFor(streamName, feedClass, feedPayload, feedInterval, feedDefaultId).Subscribe(subscriber); Completes.With(Response.Of(Response.ResponseStatus.Ok, ResponseHeader.WithHeaders(ResponseHeader.WithCorrelationId(correlationId)))); }
public void Unsubscribe(SseSubscriber subscriber) { if (!_actor.IsStopped) { Action <ISsePublisher> consumer = actor => actor.Unsubscribe(subscriber); if (_mailbox.IsPreallocated) { _mailbox.Send(_actor, consumer, null, UnsubscribeRepresentation); } else { _mailbox.Send(new LocalMessage <ISsePublisher>(_actor, consumer, UnsubscribeRepresentation)); } } else { _actor.DeadLetters.FailedDelivery(new DeadLetter(_actor, UnsubscribeRepresentation)); } }
public void Unsubscribe(SseSubscriber subscriber) { subscriber.Close(); _subscribers.Remove(subscriber.Id); }
public void Subscribe(SseSubscriber subscriber) => _subscribers.Add(subscriber.Id, subscriber);