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); }
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)); }
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; }
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) { this.GlobalPriority = globalPriority; }