public override SubscriptionToken <T> Subscribe(Action <T> onFire, SubscriptionPriority priority, Action onCancel) { var priorityAction = new PriorityAction <T>(onFire, priority, onCancel); addedSubscriptions.Enqueue(priorityAction); var token = new SubscriptionToken <T>(this, priorityAction); return(token); }
public SubscriptionToken Subscribe <TMessage>(Action <TMessage> action, ReferenceType referenceType = ReferenceType.Weak, SubscriptionPriority priority = SubscriptionPriority.Normal, string tag = null) where TMessage : Message { if (action == null) { throw new ArgumentNullException(nameof(action)); } BaseSubscription subscription = BuildSubscription(action, referenceType, priority, tag); return(SubscribeInternal(action, subscription)); }
private BaseSubscription BuildSubscription <TMessage>(Action <TMessage> action, ReferenceType referenceType, SubscriptionPriority priority, string tag) where TMessage : Message { switch (referenceType) { case ReferenceType.Strong: return(new StrongSubscription <TMessage>(action, priority, tag)); case ReferenceType.Weak: return(new WeakSubscription <TMessage>(action, priority, tag)); default: throw new ArgumentOutOfRangeException(nameof(referenceType), "reference type unexpected " + referenceType); } }
/// <summary> /// Subscribe to a message /// </summary> /// <param name="handler">Action to call when a message is present</param> /// <param name="predicate">Predicate to determine whether the message is appropriate for this subscriber</param> /// <param name="priority"></param> /// <returns>A subscription token that can be used to modify this subscription</returns> public MessageSubscriptionToken Subscribe(Action <UdpMessage> handler, Predicate <UdpMessage> predicate, SubscriptionPriority priority = SubscriptionPriority.Normal) { EventSubscription <UdpMessage> es; lock (_lock) { es = new EventSubscription <UdpMessage> { Handler = handler, Predicate = predicate }; _subscriptions.Add(es); } return(es.Token); }
public WeakSubscription(Action <TMessage> action, SubscriptionPriority priority, string tag) : base(priority, tag) { _weakReference = new WeakReference <Action <TMessage> >(action); }
public StrongSubscription(Action <TMessage> action, SubscriptionPriority priority, string tag) : base(priority, tag) { _action = action; }
protected BaseSubscription(SubscriptionPriority priority, string tag) { Id = Guid.NewGuid(); Priority = priority; Tag = tag; }
public PriorityAction(Action <T> onFire, SubscriptionPriority priority, Action onCancel) { OnFire = onFire; Priority = priority; OnCancel = onCancel; }
public abstract SubscriptionToken <T> Subscribe(Action <T> onFire, SubscriptionPriority priority = SubscriptionPriority.NORMAL, Action onCancel = null);