]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
mod_managed: Added pure CreateStateHandlerDelegate in ManagedSession for native api...
authorArtur Kraev <ravenox@gmail.com>
Sun, 2 Nov 2014 21:42:00 +0000 (00:42 +0300)
committerArtur Kraev <ravenox@gmail.com>
Sun, 2 Nov 2014 21:42:00 +0000 (00:42 +0300)
src/mod/languages/mod_managed/managed/ManagedSession.cs

index bed7a03878e014d748cd56cd40a9dc535ab073b0..84718df60f94816d02792f63d389530f757eb0ce 100644 (file)
@@ -149,6 +149,23 @@ namespace FreeSWITCH.Native
             };\r
             return del;\r
         }\r
+\r
+        /// <summary>Wraps a nice handler into a delegate suitable for reverse P/Invoke. For native api using</summary>\r
+        public static switch_state_handler_t_delegate CreateStateHandlerDelegate(Action<ManagedSession> handler)\r
+        {\r
+            // We create a ManagedSession on top of the session so callbacks can use it "nicely"\r
+            // Then we sort of dispose it.\r
+            switch_state_handler_t_delegate del = ptr =>\r
+            {\r
+                using (var sess = new ManagedSession(new SWIGTYPE_p_switch_core_session(ptr, false)))\r
+                {\r
+                    handler(sess);\r
+                    return switch_status_t.SWITCH_STATUS_SUCCESS;\r
+                }\r
+            };\r
+            return del;\r
+        }\r
+\r
         public static SWIGTYPE_p_f_p_switch_core_session__switch_status_t WrapStateHandlerDelegate(switch_state_handler_t_delegate del) {\r
             return new SWIGTYPE_p_f_p_switch_core_session__switch_status_t(Marshal.GetFunctionPointerForDelegate(del), false);\r
         }\r