From 959c53de8c320810fc18a7f95c28ebefb9e3e645 Mon Sep 17 00:00:00 2001 From: Herman van den Berg Date: Tue, 20 Sep 2016 15:29:46 +0200 Subject: [PATCH 1/8] add DialBeginEvent --- Asterisk.2013/Asterisk.NET/AsterNET.csproj | 1 + .../Manager/Event/DialBeginEvent.cs | 18 +++++++++ .../Asterisk.NET/Manager/ManagerConnection.cs | 38 ++++++++++++------- Asterisk.2013/ChangeLog.txt | 3 ++ 4 files changed, 47 insertions(+), 13 deletions(-) create mode 100644 Asterisk.2013/Asterisk.NET/Manager/Event/DialBeginEvent.cs diff --git a/Asterisk.2013/Asterisk.NET/AsterNET.csproj b/Asterisk.2013/Asterisk.NET/AsterNET.csproj index 87e74cc..5b835a9 100644 --- a/Asterisk.2013/Asterisk.NET/AsterNET.csproj +++ b/Asterisk.2013/Asterisk.NET/AsterNET.csproj @@ -232,6 +232,7 @@ + diff --git a/Asterisk.2013/Asterisk.NET/Manager/Event/DialBeginEvent.cs b/Asterisk.2013/Asterisk.NET/Manager/Event/DialBeginEvent.cs new file mode 100644 index 0000000..4c11454 --- /dev/null +++ b/Asterisk.2013/Asterisk.NET/Manager/Event/DialBeginEvent.cs @@ -0,0 +1,18 @@ +namespace AsterNET.Manager.Event +{ + /// + /// A dial begin event is triggered whenever a phone attempts to dial someone.
+ /// This event is implemented in apps/app_dial.c.
+ /// Available since Asterisk 1.2. + ///
+ public class DialBeginEvent : DialEvent + { + /// + /// Creates a new DialBeginEvent. + /// + public DialBeginEvent(ManagerConnection source) + : base(source) + { + } + } +} \ No newline at end of file diff --git a/Asterisk.2013/Asterisk.NET/Manager/ManagerConnection.cs b/Asterisk.2013/Asterisk.NET/Manager/ManagerConnection.cs index 2300c32..bbc75a5 100644 --- a/Asterisk.2013/Asterisk.NET/Manager/ManagerConnection.cs +++ b/Asterisk.2013/Asterisk.NET/Manager/ManagerConnection.cs @@ -95,15 +95,16 @@ namespace AsterNET.Manager public delegate void BridgeDestroyEventHandler(object sender, Event.BridgeDestroyEvent e); public delegate void BridgeEnterEventHandler(object sender, Event.BridgeEnterEvent e); public delegate void BridgeLeaveEventHandler(object sender, Event.BridgeLeaveEvent e); + public delegate void DialBeginEventHandler(object sender, Event.DialBeginEvent e); - #endregion + #endregion - /// - /// Default implemention of the ManagerConnection interface. - /// - public class ManagerConnection + /// + /// Default implemention of the ManagerConnection interface. + /// + public class ManagerConnection { #region Variables @@ -486,11 +487,16 @@ namespace AsterNET.Manager public event BridgeEnterEventHandler BridgeEnter; public event BridgeLeaveEventHandler BridgeLeave; - #endregion + /// + /// Raised when a dial action has started.
+ ///
+ public event DialBeginEventHandler DialBegin; - #region Constructor - ManagerConnection() - /// Creates a new instance. - public ManagerConnection() + #endregion + + #region Constructor - ManagerConnection() + /// Creates a new instance. + public ManagerConnection() { callerThread = Thread.CurrentThread; @@ -595,11 +601,11 @@ namespace AsterNET.Manager Helper.RegisterEventHandler(registeredEventHandlers, 90, typeof(BridgeEnterEvent)); Helper.RegisterEventHandler(registeredEventHandlers, 91, typeof(BridgeLeaveEvent)); Helper.RegisterEventHandler(registeredEventHandlers, 92, typeof(BlindTransferEvent)); - + Helper.RegisterEventHandler(registeredEventHandlers, 93, typeof(DialBeginEvent)); - #endregion + #endregion - this.internalEvent += new ManagerEventHandler(internalEventHandler); + this.internalEvent += new ManagerEventHandler(internalEventHandler); } #endregion @@ -1214,7 +1220,13 @@ namespace AsterNET.Manager BlindTransfer(this, (BlindTransferEvent)e); } break; - default: + case 93: + if (DialBegin != null) + { + DialBegin(this, (DialBeginEvent)e); + } + break; + default: if (UnhandledEvent != null) UnhandledEvent(this, e); return; diff --git a/Asterisk.2013/ChangeLog.txt b/Asterisk.2013/ChangeLog.txt index 65924a6..4162b4f 100644 --- a/Asterisk.2013/ChangeLog.txt +++ b/Asterisk.2013/ChangeLog.txt @@ -1,3 +1,6 @@ +20.09.2016 (herman1vdb) + Added DialBeginEvent + 05.01.2015 (Skrusty) Added a sandcastle documentation project to AsterNET. Initial draft includes CHM and HTML output based on AsterNET 1.0.0. From e5df1f71959f1b02dbf7d4edc9215fe108bf0b59 Mon Sep 17 00:00:00 2001 From: Herman van den Berg Date: Wed, 21 Sep 2016 09:04:36 +0200 Subject: [PATCH 2/8] add events DialEndEvent, QueueCallerJoinEvent, QueueCallerLeaveEvent for further Asterisk 13 support --- Asterisk.2013/Asterisk.NET/AsterNET.csproj | 3 ++ .../Manager/Event/DialBeginEvent.cs | 10 ++--- .../Manager/Event/DialEndEvent.cs | 18 +++++++++ .../Manager/Event/QueueCallerJoinEvent.cs | 15 +++++++ .../Manager/Event/QueueCallerLeaveEvent.cs | 15 +++++++ .../Asterisk.NET/Manager/ManagerConnection.cs | 39 +++++++++++++++++++ Asterisk.2013/ChangeLog.txt | 3 ++ 7 files changed, 97 insertions(+), 6 deletions(-) create mode 100644 Asterisk.2013/Asterisk.NET/Manager/Event/DialEndEvent.cs create mode 100644 Asterisk.2013/Asterisk.NET/Manager/Event/QueueCallerJoinEvent.cs create mode 100644 Asterisk.2013/Asterisk.NET/Manager/Event/QueueCallerLeaveEvent.cs diff --git a/Asterisk.2013/Asterisk.NET/AsterNET.csproj b/Asterisk.2013/Asterisk.NET/AsterNET.csproj index 5b835a9..b2305c7 100644 --- a/Asterisk.2013/Asterisk.NET/AsterNET.csproj +++ b/Asterisk.2013/Asterisk.NET/AsterNET.csproj @@ -232,8 +232,11 @@ + + + diff --git a/Asterisk.2013/Asterisk.NET/Manager/Event/DialBeginEvent.cs b/Asterisk.2013/Asterisk.NET/Manager/Event/DialBeginEvent.cs index 4c11454..1d3b588 100644 --- a/Asterisk.2013/Asterisk.NET/Manager/Event/DialBeginEvent.cs +++ b/Asterisk.2013/Asterisk.NET/Manager/Event/DialBeginEvent.cs @@ -1,11 +1,9 @@ namespace AsterNET.Manager.Event { - /// - /// A dial begin event is triggered whenever a phone attempts to dial someone.
- /// This event is implemented in apps/app_dial.c.
- /// Available since Asterisk 1.2. - ///
- public class DialBeginEvent : DialEvent + /// + /// A dial begin event is triggered whenever when a dial action has started.
+ ///
+ public class DialBeginEvent : DialEvent { /// /// Creates a new DialBeginEvent. diff --git a/Asterisk.2013/Asterisk.NET/Manager/Event/DialEndEvent.cs b/Asterisk.2013/Asterisk.NET/Manager/Event/DialEndEvent.cs new file mode 100644 index 0000000..d02e366 --- /dev/null +++ b/Asterisk.2013/Asterisk.NET/Manager/Event/DialEndEvent.cs @@ -0,0 +1,18 @@ +namespace AsterNET.Manager.Event +{ + /// + /// A dial begin event is triggered whenever when a dial action has completed.
+ ///
+ public class DialEndEvent : DialEvent + { + /// + /// Creates a new DialEndEvent. + /// + public DialEndEvent(ManagerConnection source) + : base(source) + { + } + + public string Forward { get; set; } + } +} \ No newline at end of file diff --git a/Asterisk.2013/Asterisk.NET/Manager/Event/QueueCallerJoinEvent.cs b/Asterisk.2013/Asterisk.NET/Manager/Event/QueueCallerJoinEvent.cs new file mode 100644 index 0000000..0416417 --- /dev/null +++ b/Asterisk.2013/Asterisk.NET/Manager/Event/QueueCallerJoinEvent.cs @@ -0,0 +1,15 @@ +namespace AsterNET.Manager.Event +{ + /// + /// A QueueCallerJoinEvent is triggered when a channel joins a queue.
+ ///
+ public class QueueCallerJoinEvent : QueueEvent + { + public string Position { get; set; } + + public QueueCallerJoinEvent(ManagerConnection source) + : base(source) + { + } + } +} \ No newline at end of file diff --git a/Asterisk.2013/Asterisk.NET/Manager/Event/QueueCallerLeaveEvent.cs b/Asterisk.2013/Asterisk.NET/Manager/Event/QueueCallerLeaveEvent.cs new file mode 100644 index 0000000..dff535a --- /dev/null +++ b/Asterisk.2013/Asterisk.NET/Manager/Event/QueueCallerLeaveEvent.cs @@ -0,0 +1,15 @@ +namespace AsterNET.Manager.Event +{ + /// + /// A QueueCallerLeaveEvent is triggered when a channel leaves a queue.
+ ///
+ public class QueueCallerLeaveEvent : QueueEvent + { + public string Position { get; set; } + + public QueueCallerLeaveEvent(ManagerConnection source) + : base(source) + { + } + } +} \ No newline at end of file diff --git a/Asterisk.2013/Asterisk.NET/Manager/ManagerConnection.cs b/Asterisk.2013/Asterisk.NET/Manager/ManagerConnection.cs index bbc75a5..1644c4c 100644 --- a/Asterisk.2013/Asterisk.NET/Manager/ManagerConnection.cs +++ b/Asterisk.2013/Asterisk.NET/Manager/ManagerConnection.cs @@ -96,6 +96,9 @@ namespace AsterNET.Manager public delegate void BridgeEnterEventHandler(object sender, Event.BridgeEnterEvent e); public delegate void BridgeLeaveEventHandler(object sender, Event.BridgeLeaveEvent e); public delegate void DialBeginEventHandler(object sender, Event.DialBeginEvent e); + public delegate void DialEndEventHandler(object sender, Event.DialEndEvent e); + public delegate void QueueCallerJoinEventHandler(object sender, Event.QueueCallerJoinEvent e); + public delegate void QueueCallerLeaveEventHandler(object sender, Event.QueueCallerLeaveEvent e); @@ -492,6 +495,21 @@ namespace AsterNET.Manager ///
public event DialBeginEventHandler DialBegin; + /// + /// Raised when a dial action has completed.
+ ///
+ public event DialEndEventHandler DialEnd; + + /// + /// Raised when a caller joins a Queue.
+ ///
+ public event QueueCallerJoinEventHandler QueueCallerJoin; + + /// + /// Raised when a caller leaves a Queue.
+ ///
+ public event QueueCallerLeaveEventHandler QueueCallerLeave; + #endregion #region Constructor - ManagerConnection() @@ -602,6 +620,9 @@ namespace AsterNET.Manager Helper.RegisterEventHandler(registeredEventHandlers, 91, typeof(BridgeLeaveEvent)); Helper.RegisterEventHandler(registeredEventHandlers, 92, typeof(BlindTransferEvent)); Helper.RegisterEventHandler(registeredEventHandlers, 93, typeof(DialBeginEvent)); + Helper.RegisterEventHandler(registeredEventHandlers, 94, typeof(DialEndEvent)); + Helper.RegisterEventHandler(registeredEventHandlers, 95, typeof(QueueCallerJoinEvent)); + Helper.RegisterEventHandler(registeredEventHandlers, 96, typeof(QueueCallerLeaveEvent)); #endregion @@ -1226,6 +1247,24 @@ namespace AsterNET.Manager DialBegin(this, (DialBeginEvent)e); } break; + case 94: + if (DialEnd != null) + { + DialEnd(this, (DialEndEvent)e); + } + break; + case 95: + if (QueueCallerJoin != null) + { + QueueCallerJoin(this, (QueueCallerJoinEvent)e); + } + break; + case 96: + if (QueueCallerLeave != null) + { + QueueCallerLeave(this, (QueueCallerLeaveEvent)e); + } + break; default: if (UnhandledEvent != null) UnhandledEvent(this, e); diff --git a/Asterisk.2013/ChangeLog.txt b/Asterisk.2013/ChangeLog.txt index 4162b4f..35dc944 100644 --- a/Asterisk.2013/ChangeLog.txt +++ b/Asterisk.2013/ChangeLog.txt @@ -1,3 +1,6 @@ +21.09.2016 (herman1vdb) + Added events DialEndEvent, QueueCallerJoinEvent, QueueCallerLeaveEvent for further Asterisk 13 support + 20.09.2016 (herman1vdb) Added DialBeginEvent From 121bac20d4c2340e79af0cad86fce764b969e6c6 Mon Sep 17 00:00:00 2001 From: Herman van den Berg Date: Wed, 21 Sep 2016 15:53:17 +0200 Subject: [PATCH 3/8] temporary fix for Asterisk 13 pause QueueMemberPause --- Asterisk.2013/Asterisk.NET/Helper.cs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Asterisk.2013/Asterisk.NET/Helper.cs b/Asterisk.2013/Asterisk.NET/Helper.cs index 4eaf4aa..3e11983 100644 --- a/Asterisk.2013/Asterisk.NET/Helper.cs +++ b/Asterisk.2013/Asterisk.NET/Helper.cs @@ -754,6 +754,10 @@ namespace AsterNET int hash, hashEvent; eventType = attributes["event"].ToLower(CultureInfo); + if (eventType == "queuememberpause") //temporary fix for Asterisk 13 pause QueueMemberPause + { + eventType = "queuememberpaused"; + } // Remove Event tail from event name (ex. JabberEvent) if (eventType.EndsWith("event")) eventType = eventType.Substring(0, eventType.Length - 5); From ac07b961058ec5a84e3541cdd6b4c756982ecdc4 Mon Sep 17 00:00:00 2001 From: Sean Maddison Date: Fri, 30 Sep 2016 08:57:38 +0200 Subject: [PATCH 4/8] ManagerEvent layout and formatting changes --- .../Manager/Event/ManagerEvent.cs | 283 ++++++++---------- 1 file changed, 122 insertions(+), 161 deletions(-) diff --git a/Asterisk.2013/Asterisk.NET/Manager/Event/ManagerEvent.cs b/Asterisk.2013/Asterisk.NET/Manager/Event/ManagerEvent.cs index 1f298eb..71a8bc6 100644 --- a/Asterisk.2013/Asterisk.NET/Manager/Event/ManagerEvent.cs +++ b/Asterisk.2013/Asterisk.NET/Manager/Event/ManagerEvent.cs @@ -1,178 +1,139 @@ using System; -using System.Text; using System.Collections.Generic; namespace AsterNET.Manager.Event { - /// - /// Abstract base class for all Events that can be received from the Asterisk server.
- /// Events contain data pertaining to an event generated from within the Asterisk - /// core or an extension module.
- /// There is one conrete subclass of ManagerEvent per each supported Asterisk - /// Event. - ///
- public abstract class ManagerEvent : EventArgs, IParseSupport - { - private DateTime dateReceived; - private string privilege; - private string server; - private double timestamp; + /// + /// Abstract base class for all Events that can be received from the Asterisk server.
+ /// Events contain data pertaining to an event generated from within the Asterisk + /// core or an extension module.
+ /// There is one conrete subclass of ManagerEvent per each supported Asterisk Event. + /// + /// Channel / Privilege / UniqueId are not common to all events and should be moved to + /// derived event classes. + ///
+ public abstract class ManagerEvent : EventArgs, IParseSupport + { + #region Common Event Properties - private string uniqueId; - private string channel; - private ManagerConnection src; - protected Dictionary attributes; + /// + /// Store all unknown (without setter) keys from manager event.
+ /// Use in default Parse method + ///
+ public Dictionary Attributes { get; set; } - #region Constructors - public ManagerEvent() - { - this.dateReceived = DateTime.Now; - } + /// + /// Get/Set the name of the channel. + /// + public string Channel { get; set; } + /// + /// Get/Set the point in time this event was received from the Asterisk server.
+ /// Pseudo events that are not directly received from the asterisk server + /// (for example ConnectEvent and DisconnectEvent) may return null. + ///
+ public DateTime DateReceived { get; set; } + + /// + /// Get/Set the AMI authorization class of this event.
+ /// This is one or more of system, call, log, verbose, command, agent or user. + /// Multiple privileges are separated by comma.
+ /// Note: This property is not available from Asterisk 1.0 servers. + ///
+ public string Privilege { get; set; } + + /// + /// Specify a server to which to send your commands (x.x.x.x or hostname).
+ /// This should match the server name specified in your config file's "host" entry. + /// If you do not specify a server, the proxy will pick the first one it finds -- fine in single-server configurations. + ///
+ public string Server { get; set; } + + /// + /// The ManagerConnection the Event was sourced from. + /// + public ManagerConnection Source { get; set; } + + /// + /// Returns the timestamp for this event.
+ /// The timestamp property is available in Asterisk since 1.4 + /// if enabled in manager.conf by setting timestampevents = yes. + /// In contains the time the event was generated in seconds since the epoch. + ///
+ public double Timestamp { get; set; } + + /// + /// Get/Set the unique id of the channel. + /// + public string UniqueId { get; set; } + + #endregion + + #region Constructors + /// + /// Creates a new ManagerEvent. Source already set. + /// + public ManagerEvent() + { + this.DateReceived = DateTime.Now; + } + + /// + /// Creates a new ManagerEvent + /// + /// ManagerConnection passed through in the event. public ManagerEvent(ManagerConnection source) - : this() - { - this.src = source as ManagerConnection; - } - #endregion + : this() + { + this.Source = source; + } + #endregion + #region Methods - #region Attributes - /// - /// Store all unknown (without setter) keys from manager event.
- /// Use in default Parse method . - ///
- public Dictionary Attributes - { - get { return attributes; } - } - #endregion + /// + /// Unknown properties parser + /// + /// key name + /// key value + /// true - value parsed, false - can't parse value + public virtual bool Parse(string key, string value) + { + if (Attributes == null) + { + Attributes = new Dictionary(); + } - #region Server - /// - /// Specify a server to which to send your commands (x.x.x.x or hostname).
- /// This should match the server name specified in your config file's "host" entry. - /// If you do not specify a server, the proxy will pick the first one it finds -- fine in single-server configurations. - ///
- public string Server - { - get { return server; } - set { server = value; } - } - #endregion + if (Attributes.ContainsKey(key)) + { + Attributes[key] += string.Concat(Common.LINE_SEPARATOR, value); // Key already presents, add with delimiter + } + else + { + Attributes.Add(key, value); + } - #region Timestamp - /// - /// Returns the timestamp for this event.
- /// The timestamp property is available in Asterisk since 1.4 - /// if enabled in manager.conf by setting timestampevents = yes. - /// In contains the time the event was generated in seconds since the epoch. - ///
- public double Timestamp - { - get { return this.timestamp; } - set { this.timestamp = value; } - } - #endregion + return true; + } - #region DateReceived - /// - /// Get/Set the point in time this event was received from the Asterisk server.
- /// Pseudo events that are not directly received from the asterisk server - /// (for example ConnectEvent and DisconnectEvent) may return null. - ///
- public DateTime DateReceived - { - get { return this.dateReceived; } - set { this.dateReceived = value; } - } - #endregion + /// + /// Unknown properties parser. + /// + /// dictionary + /// updated dictionary + public virtual Dictionary ParseSpecial(Dictionary attributes) + { + return attributes; + } - #region Privilege - /// - /// Get/Set the AMI authorization class of this event.
- /// This is one or more of system, call, log, verbose, command, agent or user. - /// Multiple privileges are separated by comma.
- /// Note: This property is not available from Asterisk 1.0 servers. - ///
- public string Privilege - { - get { return privilege; } - set { this.privilege = value; } - } - #endregion - - #region Source - /// - /// Event source. - /// - public ManagerConnection Source - { - get { return this.src; } - } - #endregion - - #region UniqueId - /// - /// Get/Set the unique id of the channel. - /// - public string UniqueId - { - get { return uniqueId; } - set { this.uniqueId = value; } - } - #endregion - - #region Channel - /// - /// Get/Set the name of the channel. - /// - public string Channel - { - get { return channel; } - set { this.channel = value; } - } - #endregion - - - #region Parse(string key, string value) - /// - /// Unknown properties parser - /// - /// key name - /// key value - /// true - value parsed, false - can't parse value - public virtual bool Parse(string key, string value) - { - if (attributes == null) - attributes = new Dictionary(); - - if (attributes.ContainsKey(key)) - // Key already presents, add with delimiter - attributes[key] += string.Concat(Common.LINE_SEPARATOR, value); - else - attributes.Add(key, value); - return true; - } - #endregion - - #region ParseSpecial(Dictionary attributes) - /// - /// Unknown properties parser - /// - /// dictionary - /// updated dictionary - public virtual Dictionary ParseSpecial(Dictionary attributes) - { - return attributes; - } - #endregion - - #region ToString() + /// + /// Convert all properties to string + /// + /// All event details and properties as a string public override string ToString() - { - return Helper.ToString(this); - } - #endregion - } + { + return Helper.ToString(this); + } + #endregion + } } From 1c7eb582353b27ed992ffc2d070586f43aae8c9f Mon Sep 17 00:00:00 2001 From: Herman van den Berg Date: Fri, 30 Sep 2016 11:46:09 +0200 Subject: [PATCH 5/8] add QueueMemberPauseEvent and mark QueueMemberPausedEvent as Obsolete --- .../Manager/Event/QueueMemberPauseEvent.cs | 45 +++++++++++++++++++ .../Manager/Event/QueueMemberPausedEvent.cs | 3 ++ 2 files changed, 48 insertions(+) create mode 100644 Asterisk.2013/Asterisk.NET/Manager/Event/QueueMemberPauseEvent.cs diff --git a/Asterisk.2013/Asterisk.NET/Manager/Event/QueueMemberPauseEvent.cs b/Asterisk.2013/Asterisk.NET/Manager/Event/QueueMemberPauseEvent.cs new file mode 100644 index 0000000..41bc9d7 --- /dev/null +++ b/Asterisk.2013/Asterisk.NET/Manager/Event/QueueMemberPauseEvent.cs @@ -0,0 +1,45 @@ +using System; + +namespace AsterNET.Manager.Event +{ + /// + /// Raised when a member is paused/unpaused in the queue.
+ /// Available since Asterisk 12 + ///
+ public class QueueMemberPauseEvent : AbstractQueueMemberEvent + { + /// + /// The name of the queue member. + /// + public string MemberName { get; set; } + + /// + /// Get/Set if this queue member is paused (not accepting calls).
+ /// true if this member has been paused or + /// false if not. + ///
+ public bool Paused { get; set; } + + /// + /// The reason a member was paused. + /// + public string Reason { get; set; } + + /// + /// Set to 1 if member is in call. Set to 0 after LastCall time is updated.
+ /// Available since Asterisk 13 + ///
+ public string InCall { get; set; } + + /// + /// If set when paused, the reason the queue member was paused.
+ /// Available since Asterisk 13 + ///
+ public string PausedReason { get; set; } + + public QueueMemberPauseEvent(ManagerConnection source) + : base(source) + { + } + } +} \ No newline at end of file diff --git a/Asterisk.2013/Asterisk.NET/Manager/Event/QueueMemberPausedEvent.cs b/Asterisk.2013/Asterisk.NET/Manager/Event/QueueMemberPausedEvent.cs index c26f412..93d1665 100644 --- a/Asterisk.2013/Asterisk.NET/Manager/Event/QueueMemberPausedEvent.cs +++ b/Asterisk.2013/Asterisk.NET/Manager/Event/QueueMemberPausedEvent.cs @@ -1,3 +1,5 @@ +using System; + namespace AsterNET.Manager.Event { /// @@ -5,6 +7,7 @@ namespace AsterNET.Manager.Event /// It is implemented in apps/app_queue.c.
/// Available since Asterisk 1.2 ///
+ [Obsolete("Removed since Asterisk 13", false)] public class QueueMemberPausedEvent : AbstractQueueMemberEvent { private string memberName; From 316dd50cd14f8762fa5f57c1e6ae0fc132a7e341 Mon Sep 17 00:00:00 2001 From: Herman van den Berg Date: Fri, 30 Sep 2016 11:46:24 +0200 Subject: [PATCH 6/8] Revert "temporary fix for Asterisk 13 pause QueueMemberPause" This reverts commit 121bac20d4c2340e79af0cad86fce764b969e6c6. --- Asterisk.2013/Asterisk.NET/Helper.cs | 4 ---- 1 file changed, 4 deletions(-) diff --git a/Asterisk.2013/Asterisk.NET/Helper.cs b/Asterisk.2013/Asterisk.NET/Helper.cs index 3e11983..4eaf4aa 100644 --- a/Asterisk.2013/Asterisk.NET/Helper.cs +++ b/Asterisk.2013/Asterisk.NET/Helper.cs @@ -754,10 +754,6 @@ namespace AsterNET int hash, hashEvent; eventType = attributes["event"].ToLower(CultureInfo); - if (eventType == "queuememberpause") //temporary fix for Asterisk 13 pause QueueMemberPause - { - eventType = "queuememberpaused"; - } // Remove Event tail from event name (ex. JabberEvent) if (eventType.EndsWith("event")) eventType = eventType.Substring(0, eventType.Length - 5); From ed254e340afeb96da6e98e47ab3e95f0ef9e1148 Mon Sep 17 00:00:00 2001 From: Herman van den Berg Date: Wed, 5 Oct 2016 08:42:22 +0200 Subject: [PATCH 7/8] remove obsolete and update comments --- Asterisk.2013/Asterisk.NET/AsterNET.csproj | 1 + .../Manager/Event/QueueMemberPauseEvent.cs | 2 +- .../Manager/Event/QueueMemberPausedEvent.cs | 15 +++++++++------ 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/Asterisk.2013/Asterisk.NET/AsterNET.csproj b/Asterisk.2013/Asterisk.NET/AsterNET.csproj index b2305c7..ca0337c 100644 --- a/Asterisk.2013/Asterisk.NET/AsterNET.csproj +++ b/Asterisk.2013/Asterisk.NET/AsterNET.csproj @@ -251,6 +251,7 @@ + diff --git a/Asterisk.2013/Asterisk.NET/Manager/Event/QueueMemberPauseEvent.cs b/Asterisk.2013/Asterisk.NET/Manager/Event/QueueMemberPauseEvent.cs index 41bc9d7..3f34a71 100644 --- a/Asterisk.2013/Asterisk.NET/Manager/Event/QueueMemberPauseEvent.cs +++ b/Asterisk.2013/Asterisk.NET/Manager/Event/QueueMemberPauseEvent.cs @@ -3,7 +3,7 @@ using System; namespace AsterNET.Manager.Event { /// - /// Raised when a member is paused/unpaused in the queue.
+ /// Raised when a member is paused/unpaused in the queue.
/// Available since Asterisk 12 ///
public class QueueMemberPauseEvent : AbstractQueueMemberEvent diff --git a/Asterisk.2013/Asterisk.NET/Manager/Event/QueueMemberPausedEvent.cs b/Asterisk.2013/Asterisk.NET/Manager/Event/QueueMemberPausedEvent.cs index 93d1665..d710360 100644 --- a/Asterisk.2013/Asterisk.NET/Manager/Event/QueueMemberPausedEvent.cs +++ b/Asterisk.2013/Asterisk.NET/Manager/Event/QueueMemberPausedEvent.cs @@ -2,12 +2,15 @@ using System; namespace AsterNET.Manager.Event { - /// - /// A QueueMemberPausedEvent is triggered when a queue member is paused or unpaused.
- /// It is implemented in apps/app_queue.c.
- /// Available since Asterisk 1.2 - ///
- [Obsolete("Removed since Asterisk 13", false)] + /// + /// A QueueMemberPausedEvent is triggered when a queue member is paused or unpaused.
+ /// It is implemented in apps/app_queue.c.
+ /// + /// Available since Asterisk 1.2.
+ /// Replaced by since Asterisk 12.
+ /// Removed since Asterisk 13.
+ ///
+ ///
public class QueueMemberPausedEvent : AbstractQueueMemberEvent { private string memberName; From 83e950f21f7eecfac1f634661007508447c7a9e5 Mon Sep 17 00:00:00 2001 From: Herman van den Berg Date: Tue, 18 Oct 2016 16:07:25 +0200 Subject: [PATCH 8/8] add QueueMemberPauseEventHandler --- .../Asterisk.NET/Manager/ManagerConnection.cs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/Asterisk.2013/Asterisk.NET/Manager/ManagerConnection.cs b/Asterisk.2013/Asterisk.NET/Manager/ManagerConnection.cs index 1644c4c..549b74f 100644 --- a/Asterisk.2013/Asterisk.NET/Manager/ManagerConnection.cs +++ b/Asterisk.2013/Asterisk.NET/Manager/ManagerConnection.cs @@ -99,6 +99,7 @@ namespace AsterNET.Manager public delegate void DialEndEventHandler(object sender, Event.DialEndEvent e); public delegate void QueueCallerJoinEventHandler(object sender, Event.QueueCallerJoinEvent e); public delegate void QueueCallerLeaveEventHandler(object sender, Event.QueueCallerLeaveEvent e); + public delegate void QueueMemberPauseEventHandler(object sender, Event.QueueMemberPauseEvent e); @@ -510,6 +511,12 @@ namespace AsterNET.Manager /// public event QueueCallerLeaveEventHandler QueueCallerLeave; + /// + /// A QueueMemberPauseEvent is triggered when a queue member is paused or unpaused.
+ /// Available since Asterisk 12 + ///
+ public event QueueMemberPauseEventHandler QueueMemberPause; + #endregion #region Constructor - ManagerConnection() @@ -623,6 +630,7 @@ namespace AsterNET.Manager Helper.RegisterEventHandler(registeredEventHandlers, 94, typeof(DialEndEvent)); Helper.RegisterEventHandler(registeredEventHandlers, 95, typeof(QueueCallerJoinEvent)); Helper.RegisterEventHandler(registeredEventHandlers, 96, typeof(QueueCallerLeaveEvent)); + Helper.RegisterEventHandler(registeredEventHandlers, 97, typeof(QueueMemberPauseEvent)); #endregion @@ -1265,6 +1273,12 @@ namespace AsterNET.Manager QueueCallerLeave(this, (QueueCallerLeaveEvent)e); } break; + case 97: + if (QueueMemberPause != null) + { + QueueMemberPause(this, (QueueMemberPauseEvent)e); + } + break; default: if (UnhandledEvent != null) UnhandledEvent(this, e);