private void AddSubscription(string queue, EvHandler handler) { if (!subscriptions.TryGetValue(queue, out List <EvHandler> handlers)) { handlers = new List <EvHandler>(); subscriptions[queue] = handlers; } handlers.Add(handler); }
//-------------------------------------------------------------------------------------------------------------------------------------- #endregion #region Functions #region Private Functions //-------------------------------------------------------------------------------------------------------------------------------------- static void __exec <T>(object sender, T ev, EvInfo evInfo, EvHandler evhandle) { //use Dynamic callback if derived type; use known type otherwise if (evInfo.IsDerivedMatch) { ((dynamic)evhandle.Cb)(sender, evInfo, ev); } else { ((EventCb <T>)evhandle.Cb)(sender, evInfo, ev); } }
public void Unsubscribe(string ev, EvHandler handler) { lock (lockObj) { var q = queue.GetQueue(ev); if (RemoveSubscription(ev, handler) == 0) { q.DetachReceiver(); q.EventReceivedHandler = null; } } }
public void Subscribe(string queueName, EvHandler handler) { lock (lockObj) { var q = queue.GetQueue(queueName); if (GetSubCountForQueue(queueName) == 0) { q.AttachReceiver(); q.EventReceivedHandler = Queue_EventReceived; } AddSubscription(queueName, handler); } }
/// <summary> /// removes handler from queue and returns count of remaining handlers for said queue /// </summary> /// <param name="queue"></param> /// <param name="handler"></param> /// <returns></returns> private int RemoveSubscription(string queue, EvHandler handler) { if (subscriptions.TryGetValue(queue, out List <EvHandler> handlers)) { handlers.Remove(handler); if (handlers.Count == 0) { subscriptions.Remove(queue); } return(handlers.Count); } return(0); }