diff --git a/Asterisk.2013/Asterisk.NET/Helper.cs b/Asterisk.2013/Asterisk.NET/Helper.cs index 8d2ff60..49bb485 100644 --- a/Asterisk.2013/Asterisk.NET/Helper.cs +++ b/Asterisk.2013/Asterisk.NET/Helper.cs @@ -874,7 +874,7 @@ namespace AsterNET #region RegisterEventHandler(Dictionary> list, Type eventType, Action action) - internal static void RegisterEventHandler(Dictionary> list, Type eventType, Action action) + internal static void RegisterEventHandler(Dictionary> list, Type eventType, Func action) { var eventTypeName = eventType.Name; int eventHash = eventTypeName.GetHashCode(); diff --git a/Asterisk.2013/Asterisk.NET/Manager/ManagerConnection.cs b/Asterisk.2013/Asterisk.NET/Manager/ManagerConnection.cs index 15cede9..5620d3f 100644 --- a/Asterisk.2013/Asterisk.NET/Manager/ManagerConnection.cs +++ b/Asterisk.2013/Asterisk.NET/Manager/ManagerConnection.cs @@ -1,5 +1,4 @@ using System; -using System.IO; using System.Threading; using System.Collections; using AsterNET.Manager.Action; @@ -7,11 +6,9 @@ using AsterNET.Manager.Event; using AsterNET.Manager.Response; using System.Text.RegularExpressions; using System.Text; -using System.Net.Sockets; using System.Collections.Generic; using System.Reflection; using AsterNET.IO; -using AsterNET.Util; namespace AsterNET.Manager { @@ -58,7 +55,7 @@ namespace AsterNET.Manager private int reconnectCount; private Dictionary registeredEventClasses; - private Dictionary> registeredEventHandlers; + private Dictionary> registeredEventHandlers; private event EventHandler internalEvent; private bool fireAllEvents = false; private Thread callerThread; @@ -446,7 +443,7 @@ namespace AsterNET.Manager Helper.RegisterBuiltinEventClasses(registeredEventClasses); - registeredEventHandlers = new Dictionary>(); + registeredEventHandlers = new Dictionary>(); #region Event mapping table Helper.RegisterEventHandler(registeredEventHandlers, typeof(AgentCallbackLoginEvent), arg => fireEvent(AgentCallbackLogin, arg)); @@ -630,12 +627,10 @@ namespace AsterNET.Manager if (registeredEventHandlers.ContainsKey(eventHash)) { var currentEvent = registeredEventHandlers[eventHash]; - currentEvent(e); - return; - } - else - { - fireEvent(UnhandledEvent, e); + if (currentEvent(e)) + { + return; + } } if (fireAllEvents) @@ -1900,10 +1895,15 @@ namespace AsterNET.Manager /// EventHandler argument /// Event delegate /// ManagerEvent or inherited class. Argument of eventHandler. - private void fireEvent(EventHandler asterEvent, ManagerEvent arg) where T : ManagerEvent + private bool fireEvent(EventHandler asterEvent, ManagerEvent arg) where T : ManagerEvent { if (asterEvent != null) + { asterEvent(this, (T)arg); + return true; + } + + return false; } #endregion }