private void TryRemoveSubscriber(MessageListEntry <TMessage, TSubscriber> e) { if (!e.Empty()) { return; } OnRemovingSubscriber(e); Subscribers.Remove(e.SubscriberId); OnDisposingSubscription(e); e.Dispose(); }
private void Subscribe(TMessage message) { var e = Subscribers.Get(message.SubscriberId); if (e == null) { var subscriber = OnCreatingSubscriber(message.SubscriberId, message); Subscribers.Add(message.SubscriberId, e = new MessageListEntry <TMessage, TSubscriber>(subscriber, message.SubscriberId)); } //only add if not an update if (!e.Process(message)) { OnAddingToSubscriber(e, message); } }
protected abstract void OnDisposingSubscription(MessageListEntry <TMessage, TSubscriber> entry);
protected abstract void OnRemovingSubscriber(MessageListEntry <TMessage, TSubscriber> entry);
protected abstract void OnRemovingFromSubscriber(MessageListEntry <TMessage, TSubscriber> entry, TMessage message);
protected abstract void OnAddingToSubscriber(MessageListEntry <TMessage, TSubscriber> entry, TMessage message);