Example #1
0
            public void Add(GlobalPriority globalPriority, int extensionId, EventPriority priority,
                            EventRaiseHandler <T> callback)
            {
                SortedDictionary <int,
                                  SortedDictionary <EventPriority,
                                                    List <EventRaiseHandler <T> > > > extensions;

                if (!this.TryGetValue(globalPriority, out extensions))
                {
                    extensions =
                        new SortedDictionary <int, SortedDictionary <EventPriority, List <EventRaiseHandler <T> > > >();
                    this.Add(globalPriority, extensions);
                }

                SortedDictionary <EventPriority, List <EventRaiseHandler <T> > > priorities;

                if (!extensions.TryGetValue(extensionId, out priorities))
                {
                    priorities = new SortedDictionary <EventPriority, List <EventRaiseHandler <T> > >();
                    extensions.Add(extensionId, priorities);
                }

                List <EventRaiseHandler <T> > value;

                if (!priorities.TryGetValue(priority, out value))
                {
                    value = new List <EventRaiseHandler <T> >();
                    priorities.Add(priority, value);
                }

                value.Add(callback);
            }
Example #2
0
        public void Bind(EventRaiseHandler <T> callback, GlobalPriority globalPriority,
                         EventPriority priority = EventPriority.Normal)
        {
            var assembly = callback.Method.DeclaringType?.Assembly;

            this.BindInternal(assembly, callback, globalPriority, priority);
        }
 public static Task <T> WaitOneAsync <T>(
     this EventHandle <T> eventHandle,
     GlobalPriority globalPriority,
     EventPriority priority = default(EventPriority))
     where T : Event <T>
 {
     return(WaitOneAsyncInternal(Assembly.GetCallingAssembly(), eventHandle, CancellationToken.None,
                                 globalPriority, priority));
 }
Example #4
0
 public void Bind(EventRaiseHandler <T> callback, GlobalPriority globalPriority, EventPriority priority = EventPriority.Normal)
 {
     lock (this._eventHandlers)
     {
         var assembly    = callback.Method.DeclaringType.Assembly;
         var extensionId = ExtensionServices.GetExtensionId(this.BotBits, assembly);
         this._eventHandlers.Add(globalPriority, extensionId ?? int.MaxValue, priority, callback);
     }
 }
        private static Task <T> WaitOneAsyncInternal <T>(
            Assembly assembly,
            EventHandle <T> eventHandle,
            CancellationToken ct,
            GlobalPriority globalPriority,
            EventPriority priority = default(EventPriority))
            where T : Event <T>
        {
            var tcs = new TaskCompletionSource <T>();

            ct.Register(() => tcs.TrySetCanceled(), false);

            var raiseHandler = new EventRaiseHandler <T>(t => tcs.TrySetResult(t));

            eventHandle.BindInternal(assembly, raiseHandler, globalPriority, priority);
            tcs.Task.ContinueWith(t => eventHandle.Unbind(raiseHandler), CancellationToken.None);

            return(tcs.Task);
        }
 public EventListenerAttribute(GlobalPriority globalPriority, EventPriority priority)
     : this(priority)
 {
     this._globalPriority = globalPriority;
 }
Example #7
0
        internal void BindInternal([CanBeNull] Assembly assembly, EventRaiseHandler <T> callback, GlobalPriority globalPriority,
                                   EventPriority priority)
        {
            var extensionId = ExtensionServices.GetExtensionId(this.BotBits, assembly);

            DiagnosticServices.EventHandle_BindInternal <T>(this.BotBits, extensionId.HasValue);

            lock (this._eventHandlers)
            {
                this._eventHandlers.Add(globalPriority, extensionId ?? int.MaxValue, priority, callback);
            }
        }
 public EventListenerAttribute(GlobalPriority globalPriority, EventPriority priority)
     : this(priority)
 {
     this._globalPriority = globalPriority;
 }
 public EventListenerAttribute(GlobalPriority globalPriority)
 {
     this.GlobalPriority = globalPriority;
 }