Пример #1
0
        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);
        }
Пример #2
0
        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));
        }
Пример #3
0
        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);
            }
        }
Пример #4
0
        /// <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);
        }
Пример #5
0
 public WeakSubscription(Action <TMessage> action,
                         SubscriptionPriority priority, string tag) : base(priority, tag)
 {
     _weakReference = new WeakReference <Action <TMessage> >(action);
 }
Пример #6
0
 public StrongSubscription(Action <TMessage> action,
                           SubscriptionPriority priority, string tag) : base(priority, tag)
 {
     _action = action;
 }
Пример #7
0
 protected BaseSubscription(SubscriptionPriority priority, string tag)
 {
     Id       = Guid.NewGuid();
     Priority = priority;
     Tag      = tag;
 }
Пример #8
0
 public PriorityAction(Action <T> onFire, SubscriptionPriority priority, Action onCancel)
 {
     OnFire   = onFire;
     Priority = priority;
     OnCancel = onCancel;
 }
Пример #9
0
 public abstract SubscriptionToken <T> Subscribe(Action <T> onFire, SubscriptionPriority priority = SubscriptionPriority.NORMAL, Action onCancel = null);