<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:p="urn:schemas-microsoft-com:office:powerpoint" xmlns:a="urn:schemas-microsoft-com:office:access" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882" xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema" xmlns:b="urn:schemas-microsoft-com:office:publisher" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:c="urn:schemas-microsoft-com:office:component:spreadsheet" xmlns:odc="urn:schemas-microsoft-com:office:odc" xmlns:oa="urn:schemas-microsoft-com:office:activation" xmlns:html="http://www.w3.org/TR/REC-html40" xmlns:q="http://schemas.xmlsoap.org/soap/envelope/" xmlns:rtc="http://microsoft.com/officenet/conferencing" xmlns:D="DAV:" xmlns:Repl="http://schemas.microsoft.com/repl/" xmlns:mt="http://schemas.microsoft.com/sharepoint/soap/meetings/" xmlns:x2="http://schemas.microsoft.com/office/excel/2003/xml" xmlns:ppda="http://www.passport.com/NameSpace.xsd" xmlns:ois="http://schemas.microsoft.com/sharepoint/soap/ois/" xmlns:dir="http://schemas.microsoft.com/sharepoint/soap/directory/" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:dsp="http://schemas.microsoft.com/sharepoint/dsp" xmlns:udc="http://schemas.microsoft.com/data/udc" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sub="http://schemas.microsoft.com/sharepoint/soap/2002/1/alerts/" xmlns:ec="http://www.w3.org/2001/04/xmlenc#" xmlns:sp="http://schemas.microsoft.com/sharepoint/" xmlns:sps="http://schemas.microsoft.com/sharepoint/soap/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:udcs="http://schemas.microsoft.com/data/udc/soap" xmlns:udcxf="http://schemas.microsoft.com/data/udc/xmlfile" xmlns:udcp2p="http://schemas.microsoft.com/data/udc/parttopart" xmlns:wf="http://schemas.microsoft.com/sharepoint/soap/workflow/" xmlns:dsss="http://schemas.microsoft.com/office/2006/digsig-setup" xmlns:dssi="http://schemas.microsoft.com/office/2006/digsig" xmlns:mdssi="http://schemas.openxmlformats.org/package/2006/digital-signature" xmlns:mver="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns:mrels="http://schemas.openxmlformats.org/package/2006/relationships" xmlns:spwp="http://microsoft.com/sharepoint/webpartpages" xmlns:ex12t="http://schemas.microsoft.com/exchange/services/2006/types" xmlns:ex12m="http://schemas.microsoft.com/exchange/services/2006/messages" xmlns:pptsl="http://schemas.microsoft.com/sharepoint/soap/SlideLibrary/" xmlns:spsl="http://microsoft.com/webservices/SharePointPortalServer/PublishedLinksService" xmlns:Z="urn:schemas-microsoft-com:" xmlns:st="&#1;" xmlns="http://www.w3.org/TR/REC-html40">

<head>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=us-ascii">
<meta name=Generator content="Microsoft Word 12 (filtered medium)">
<style>
<!--
 /* Font Definitions */
 @font-face
        {font-family:"MS Mincho";
        panose-1:2 2 6 9 4 2 5 8 3 4;}
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
@font-face
        {font-family:"\@MS Mincho";
        panose-1:2 2 6 9 4 2 5 8 3 4;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p
        {mso-style-priority:99;
        mso-margin-top-alt:auto;
        margin-right:0in;
        mso-margin-bottom-alt:auto;
        margin-left:0in;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
span.EmailStyle18
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page Section1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.Section1
        {page:Section1;}
-->
</style>
<!--[if gte mso 9]><xml>
 <o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
 <o:shapelayout v:ext="edit">
  <o:idmap v:ext="edit" data="1" />
 </o:shapelayout></xml><![endif]-->
</head>

<body lang=EN-US link=blue vlink=purple>

<div class=Section1>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'>I&#8217;m not sure how EventConsumer is supposed to work &#8211; maybe one
of the real devs can explain how pop works and if it should fail on pop 0 or
not.<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><o:p>&nbsp;</o:p></span></p>

<div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in'>

<p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>From:</span></b><span
style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>
freeswitch-users-bounces@lists.freeswitch.org
[mailto:freeswitch-users-bounces@lists.freeswitch.org] <b>On Behalf Of </b>Phillip
Jones<br>
<b>Sent:</b> Tuesday, September 08, 2009 3:50 PM<br>
<b>To:</b> freeswitch-users@lists.freeswitch.org<br>
<b>Subject:</b> Re: [Freeswitch-users] Subscribing to events in managed C# /
.NET<o:p></o:p></span></p>

</div>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal style='margin-bottom:12.0pt'>I build this out. <br>
<br>
This seems to work fine:<br>
<br>
ThreadPool.QueueUserWorkItem((o) =&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Log.WriteLine(LogLevel.Notice, &quot;Thread Starting. &quot;);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
EventConsumer con = new EventConsumer(&quot;all&quot;, &quot;&quot;);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
while (true)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
{<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span
style='background:yellow'>&nbsp;<b> Event ev = con.pop(1);</b></span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Log.WriteLine(LogLevel.Alert, &quot;Event: &quot; +
ev.GetHeader(&quot;Event-Name&quot;));<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span
style='background:#FFCC66'> </span><span style='background:yellow'>//freeswitch.msleep(100);</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
}<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; });<br>
<br>
With <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Event ev =
con.pop(0) however FS crashes with a System.NullReferenceException (attached)<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<o:p></o:p></p>

<div>

<p class=MsoNormal>On Tue, Sep 8, 2009 at 5:20 PM, Raffaele P. Guidi &lt;<a
href="mailto:raffaele.p.guidi@gmail.com">raffaele.p.guidi@gmail.com</a>&gt;
wrote:<o:p></o:p></p>

<p class=MsoNormal>Oh, I see... all those years wasted doing java stuff! :D<o:p></o:p></p>

<div>

<div>

<p class=MsoNormal style='margin-bottom:12.0pt'><o:p>&nbsp;</o:p></p>

<div>

<p class=MsoNormal>On Tue, Sep 8, 2009 at 22:46, Michael Giagnocavo &lt;<a
href="mailto:mgg@giagnocavo.net" target="_blank">mgg@giagnocavo.net</a>&gt;
wrote:<o:p></o:p></p>

<div>

<div>

<p>&#8220;&nbsp;ThreadPool.QueueUserWorkItem((o) =&gt;&#8221;<o:p></o:p></p>

<p>That starts a lambda, which is compiled to a delegate, same as anonymous
methods.<o:p></o:p></p>

<p>Guess I&#8217;ll wait for him to respond on the crash he gets.<o:p></o:p></p>

<p><span style='font-size:11.0pt;color:#1F497D'>&nbsp;</span><o:p></o:p></p>

<p><span style='font-size:11.0pt;color:#1F497D'>&nbsp;</span><o:p></o:p></p>

<div style='border:none;border-top:solid windowtext 1.0pt;padding:3.0pt 0in 0in 0in;
border-color:-moz-use-text-color -moz-use-text-color'>

<p><b><span style='font-size:10.0pt'>From:</span></b><span style='font-size:
10.0pt'> <a href="mailto:freeswitch-users-bounces@lists.freeswitch.org"
target="_blank">freeswitch-users-bounces@lists.freeswitch.org</a> [mailto:<a
href="mailto:freeswitch-users-bounces@lists.freeswitch.org" target="_blank">freeswitch-users-bounces@lists.freeswitch.org</a>]
<b>On Behalf Of </b>Raffaele P. Guidi<br>
<b>Sent:</b> Tuesday, September 08, 2009 12:22 PM</span><o:p></o:p></p>

<div>

<div>

<p class=MsoNormal><br>
<b>To:</b> <a href="mailto:freeswitch-users@lists.freeswitch.org"
target="_blank">freeswitch-users@lists.freeswitch.org</a><br>
<b>Subject:</b> Re: [Freeswitch-users] Subscribing to events in managed C# /
.NET<o:p></o:p></p>

</div>

</div>

</div>

<div>

<div>

<p>&nbsp;<o:p></o:p></p>

<p>Well, I can't see any delegate in josh sample, just a&nbsp;<span
style='font-size:10.0pt;color:#444444'>ThreadPool.QueueUserWorkItem.&nbsp;</span>Here
is an example&nbsp;that, at least on my system&nbsp;(I reached my home pc in
the meanwhile), works fine.<o:p></o:p></p>

<div>

<p>&nbsp;<o:p></o:p></p>

</div>

<div>

<div>

<p><span style='font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp; public
class LoadPluginDemo : ILoadNotificationPlugin {</span><o:p></o:p></p>

</div>

<div>

<p><span style='font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
delegate void Listener();</span><o:p></o:p></p>

</div>

<div>

<p><span style='font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
private void EventListener() {</span><o:p></o:p></p>

</div>

<div>

<p><span style='font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;
&nbsp; &nbsp; &nbsp;EventConsumer con = new EventConsumer(&quot;all&quot;,
null);</span><o:p></o:p></p>

</div>

<div>

<p><span style='font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;
&nbsp; &nbsp; &nbsp;while (true){</span><o:p></o:p></p>

</div>

<div>

<p><span style='font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp;Event ev = con.pop(1);</span><o:p></o:p></p>

</div>

<div>

<p><span style='font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp;Log.WriteLine(LogLevel.Notice, &quot;Got event
&quot; + ev.GetHeader(&quot;Event-Name&quot;)); &nbsp; &nbsp; &nbsp; &nbsp;</span><o:p></o:p></p>

</div>

<div>

<p><span style='font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;
&nbsp; &nbsp; &nbsp;}</span><o:p></o:p></p>

</div>

<div>

<p><span style='font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
}</span><o:p></o:p></p>

</div>

<div>

<p><span style='font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;
&nbsp;public bool Load() {</span><o:p></o:p></p>

</div>

<div>

<p><span style='font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;
&nbsp; &nbsp; &nbsp;Log.WriteLine(LogLevel.Notice, &quot;LoadDemo
running.&quot;);</span><o:p></o:p></p>

</div>

<div>

<p><span style='font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;
&nbsp; &nbsp; &nbsp;new Listener(EventListener).BeginInvoke(null,null);</span><o:p></o:p></p>

</div>

<div>

<p><span style='font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;
&nbsp; &nbsp; &nbsp;return true;</span><o:p></o:p></p>

</div>

<div>

<p><span style='font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;
&nbsp;}</span><o:p></o:p></p>

</div>

<div>

<p><span style='font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp; }</span><o:p></o:p></p>

</div>

<div>

<p>&nbsp;<o:p></o:p></p>

</div>

<div>

<p>&nbsp;<o:p></o:p></p>

</div>

<p>&nbsp;<o:p></o:p></p>

<div>

<p>On Tue, Sep 8, 2009 at 18:43, Michael Giagnocavo &lt;<a
href="mailto:mgg@giagnocavo.net" target="_blank">mgg@giagnocavo.net</a>&gt;
wrote:<o:p></o:p></p>

<div>

<div>

<p><span style='font-size:11.0pt;color:#1F497D'>That&#8217;s what his sample does,
but he says it crashes.</span><o:p></o:p></p>

<p><span style='font-size:11.0pt;color:#1F497D'>&nbsp;</span><o:p></o:p></p>

<div style='border:none;border-top:solid windowtext 1.0pt;padding:3.0pt 0in 0in 0in;
border-color:-moz-use-text-color -moz-use-text-color'>

<p><b><span style='font-size:10.0pt'>From:</span></b><span style='font-size:
10.0pt'> <a href="mailto:freeswitch-users-bounces@lists.freeswitch.org"
target="_blank">freeswitch-users-bounces@lists.freeswitch.org</a> [mailto:<a
href="mailto:freeswitch-users-bounces@lists.freeswitch.org" target="_blank">freeswitch-users-bounces@lists.freeswitch.org</a>]
<b>On Behalf Of </b>Raffaele P. Guidi<br>
<b>Sent:</b> Tuesday, September 08, 2009 10:08 AM</span><o:p></o:p></p>

<div>

<p><br>
<b>To:</b> <a href="mailto:freeswitch-users@lists.freeswitch.org"
target="_blank">freeswitch-users@lists.freeswitch.org</a><br>
<b>Subject:</b> Re: [Freeswitch-users] Subscribing to events in managed C# /
.NET<o:p></o:p></p>

</div>

</div>

<p>&nbsp;<o:p></o:p></p>

<div>

<p>Hi, you just have to use delegates to asynchronously call the function
containing the loop and return back the control to the calling thread. Here an
example (don't have my code at hand, hope it doesn't contain typos).<o:p></o:p></p>

</div>

<div>

<div>

<div>

<p>&nbsp;<o:p></o:p></p>

</div>

<div>

<p>Regards,<o:p></o:p></p>

</div>

<div>

<p>&nbsp;&nbsp; Raffaele<o:p></o:p></p>

</div>

<div>

<p>&nbsp;<o:p></o:p></p>

</div>

<div>

<div>

<p><span style='font-family:"Courier New"'>&nbsp;&nbsp; public class TestLoop :
ILoadNotificationPlugin</span><o:p></o:p></p>

</div>

<div>

<p><span style='font-family:"Courier New"'>&nbsp;&nbsp; &nbsp;{</span><o:p></o:p></p>

</div>

<div>

<p><span style='font-family:"Courier New"'>&nbsp; </span><o:p></o:p></p>

<div>

<p><span style='font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Delegate
void DoStuffDelegate();</span><o:p></o:p></p>

</div>

<div>

<p><span style='font-family:"Courier New"'>&nbsp;</span><o:p></o:p></p>

</div>

<p><span style='font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public
void doStuff()</span><o:p></o:p></p>

</div>

<div>

<div>

<p><span style='font-family:"Courier New"'>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</span><o:p></o:p></p>

</div>

<div>

<p><span style='font-family:"Courier New"'>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp;EventConsumer con = new EventConsumer(&quot;all&quot;,
&quot;&quot;);</span><o:p></o:p></p>

</div>

</div>

<div>

<p><span style='font-family:"Courier New"'>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp;while (true)</span><o:p></o:p></p>

</div>

<div>

<div>

<p><span style='font-family:"Courier New"'>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp;{</span><o:p></o:p></p>

</div>

<div>

<p><span style='font-family:"Courier New"'>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp;Event ev = con.pop(0);</span><o:p></o:p></p>

</div>

</div>

<div>

<p><span style='font-family:"Courier New"'>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp;Log.WriteLine(LogLevel.Notice, &quot;Event: &quot; +
ev.serialized_string);</span><o:p></o:p></p>

</div>

<div>

<p><span style='font-family:"Courier New"'>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp;freeswitch.msleep(100);</span><o:p></o:p></p>

</div>

<div>

<p><span style='font-family:"Courier New"'>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp;}</span><o:p></o:p></p>

</div>

<div>

<p><span style='font-family:"Courier New"'>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</span><o:p></o:p></p>

</div>

<div>

<div>

<p><span style='font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public
bool Load()</span><o:p></o:p></p>

</div>

<div>

<div>

<p><span style='font-family:"Courier New"'>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</span><o:p></o:p></p>

</div>

<div>

<p><span style='font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DoStuffDelegate
dsdlg = new DoStuffDelegate(doStuff);</span><o:p></o:p></p>

</div>

<div>

<div>

<p><span style='font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dsdlg.BeginInvoke();</span><o:p></o:p></p>

</div>

<p><span style='font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span><o:p></o:p></p>

</div>

</div>

<p style='margin-bottom:12.0pt'><span style='font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;}</span><o:p></o:p></p>

</div>

</div>

<div>

<p>On Tue, Sep 8, 2009 at 08:21, Josh Rivers &lt;<a
href="mailto:josh@radianttiger.com" target="_blank">josh@radianttiger.com</a>&gt;
wrote:<o:p></o:p></p>

<p>Thanks for the response! <o:p></o:p></p>

<div>

<p>&nbsp;<o:p></o:p></p>

</div>

<div>

<p>I have tried putting a long-running loop here, but then it blocks anything
else managed from happening:<o:p></o:p></p>

</div>

<div>

<p>&nbsp;<o:p></o:p></p>

</div>

<div>

<div>

<p>&nbsp;&nbsp; public class TestLoop : ILoadNotificationPlugin<o:p></o:p></p>

</div>

<div>

<p>&nbsp;&nbsp; &nbsp;{<o:p></o:p></p>

</div>

<div>

<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;public bool Load()<o:p></o:p></p>

</div>

<div>

<div>

<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{<o:p></o:p></p>

</div>

<div>

<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;EventConsumer con = new
EventConsumer(&quot;all&quot;, &quot;&quot;);<o:p></o:p></p>

</div>

</div>

<div>

<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;while (true)<o:p></o:p></p>

</div>

<div>

<div>

<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{<o:p></o:p></p>

</div>

<div>

<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Event ev =
con.pop(0);<o:p></o:p></p>

</div>

</div>

<div>

<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Log.WriteLine(LogLevel.Notice,
&quot;Event: &quot; + ev.serialized_string);<o:p></o:p></p>

</div>

<div>

<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp;freeswitch.msleep(100);<o:p></o:p></p>

</div>

<div>

<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}<o:p></o:p></p>

</div>

<div>

<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}<o:p></o:p></p>

</div>

<div>

<p>&nbsp;&nbsp; &nbsp;}<o:p></o:p></p>

</div>

<div>

<p>&nbsp;<o:p></o:p></p>

</div>

<div>

<p>However, if I fork off a thread here, freeswitch crashes:<o:p></o:p></p>

</div>

<div>

<div>

<p>&nbsp;&nbsp; &nbsp;public class TestLoop : ILoadNotificationPlugin<o:p></o:p></p>

</div>

<div>

<p>&nbsp;&nbsp; &nbsp;{<o:p></o:p></p>

</div>

<div>

<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;public bool Load()<o:p></o:p></p>

</div>

<div>

<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{<o:p></o:p></p>

</div>

<div>

<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp;ThreadPool.QueueUserWorkItem((o) =&gt;<o:p></o:p></p>

</div>

<div>

<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{<o:p></o:p></p>

</div>

<div>

<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp;Log.WriteLine(LogLevel.Notice, &quot;Thread Starting. &quot;);<o:p></o:p></p>

</div>

<div>

<div>

<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;EventConsumer
con = new EventConsumer(&quot;all&quot;, &quot;&quot;);<o:p></o:p></p>

</div>

</div>

<div>

<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;while (true)<o:p></o:p></p>

</div>

<div>

<div>

<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{<o:p></o:p></p>

</div>

<div>

<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp;Event ev = con.pop(0);<o:p></o:p></p>

</div>

</div>

<div>

<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp;Log.WriteLine(LogLevel.Notice, &quot;Event: &quot; +
ev.serialized_string);<o:p></o:p></p>

</div>

<div>

<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp;freeswitch.msleep(100);<o:p></o:p></p>

</div>

<div>

<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}<o:p></o:p></p>

</div>

<div>

<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;});<o:p></o:p></p>

</div>

<div>

<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return true;<o:p></o:p></p>

</div>

<div>

<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}<o:p></o:p></p>

</div>

<div>

<p>&nbsp;&nbsp; &nbsp;}<o:p></o:p></p>

</div>

<div>

<p>&nbsp;<o:p></o:p></p>

</div>

<div>

<p>It doesn't look like this is a good place to start a long-running process?<o:p></o:p></p>

</div>

<div>

<p>&nbsp;<o:p></o:p></p>

</div>

<div>

<p>Thanks!<o:p></o:p></p>

</div>

<div>

<p>Josh<o:p></o:p></p>

</div>

<div>

<p><span style='color:#888888'>&nbsp;</span><o:p></o:p></p>

</div>

</div>

</div>

<div>

<div>

<div>

<div>

<p>On Mon, Sep 7, 2009 at 11:05 PM, Raffaele P. Guidi &lt;<a
href="mailto:raffaele.p.guidi@gmail.com" target="_blank">raffaele.p.guidi@gmail.com</a>&gt;
wrote:<o:p></o:p></p>

<p>Yes! <o:p></o:p></p>

<div>

<p>&nbsp;<o:p></o:p></p>

</div>

<div>

<div>

<p><span style='font-family:"Courier New"'>public class LoadDemo :
ILoadNotificationPlugin {</span><o:p></o:p></p>

</div>

<div>

<p><span style='font-family:"Courier New"'>&nbsp;&nbsp; &nbsp;public bool
Load() {</span><o:p></o:p></p>

</div>

<div>

<p><span style='font-family:"Courier New"'>&nbsp;&nbsp; &nbsp; &nbsp;
&nbsp;Log.WriteLine(LogLevel.Notice, &quot;LoadDemo running.&quot;);</span><o:p></o:p></p>

</div>

<div>

<p><span style='font-family:"Courier New"'>&nbsp;&nbsp; &nbsp; &nbsp;
&nbsp;return true;</span><o:p></o:p></p>

</div>

<div>

<p><span style='font-family:"Courier New"'>&nbsp;&nbsp; &nbsp;}</span><o:p></o:p></p>

</div>

<div>

<p><span style='font-family:"Courier New"'>}</span><o:p></o:p></p>

</div>

<div>

<p>&nbsp;<o:p></o:p></p>

</div>

<div>

<p>this example is from Michael Giagnocavo's Demo.csx which you can find into
the mod_managed svn.<o:p></o:p></p>

</div>

<div>

<p>&nbsp;<o:p></o:p></p>

</div>

<div>

<p>And let me add that works like a charm :)<o:p></o:p></p>

</div>

<div>

<p>&nbsp;<o:p></o:p></p>

</div>

<div>

<p>Ciao,<o:p></o:p></p>

</div>

<div>

<p>&nbsp;&nbsp; Raffaele<o:p></o:p></p>

</div>

<p>&nbsp;<o:p></o:p></p>

<div>

<div>

<div>

<p>On Sun, Sep 6, 2009 at 22:50, Josh Rivers &lt;<a
href="mailto:josh@radianttiger.com" target="_blank">josh@radianttiger.com</a>&gt;
wrote:<o:p></o:p></p>

</div>

</div>

<blockquote style='border:none;border-left:solid windowtext 1.0pt;padding:0in 0in 0in 6.0pt;
margin-left:4.8pt;margin-top:5.0pt;margin-right:0in;margin-bottom:5.0pt;
border-color:-moz-use-text-color -moz-use-text-color -moz-use-text-color rgb(204, 204, 204)'>

<div>

<div>

<div>

<p>Is there a way to start this when FreeSWITCH starts? The lua and perl
modules have a 'startup-script' configuration preference. Is there something
similar in mod_managed? Or is there a way to have an api command executed at a
startup?<o:p></o:p></p>

</div>

<div>

<p>&nbsp;<o:p></o:p></p>

</div>

<div>

<p>&lt;quote author=&quot;Phillip Jones&quot;&gt;<o:p></o:p></p>

</div>

<div>

<div>

<div>

<p>Exactly what I was after - thank you!<o:p></o:p></p>

</div>

<div>

<p>&nbsp;<o:p></o:p></p>

</div>

<div>

<p>On Thu, Sep 3, 2009 at 1:54 PM, Jeff Lenk &lt;<a
href="mailto:jlenk@frontiernet.net" target="_blank">jlenk@frontiernet.net</a>&gt;
wrote:<o:p></o:p></p>

</div>

<div>

<p>&nbsp;<o:p></o:p></p>

</div>

<div>

<p>&gt;&nbsp;<o:p></o:p></p>

</div>

<div>

<p>&gt; try something like this<o:p></o:p></p>

</div>

<div>

<p>&gt;&nbsp;<o:p></o:p></p>

</div>

<div>

<p>&gt; EventConsumer con = new EventConsumer(&quot;all&quot;, &quot;&quot;);<o:p></o:p></p>

</div>

<div>

<p>&gt; Event ev = con.pop(0);<o:p></o:p></p>

</div>

<div>

<p>&gt;&nbsp;<o:p></o:p></p>

</div>

<div>

<p>&gt; see lua sample -<o:p></o:p></p>

</div>

<div>

<p>&gt; <a href="http://wiki.freeswitch.org/wiki/Lua#freeswitch.EventConsumer"
target="_blank">http://wiki.freeswitch.org/wiki/Lua#freeswitch.EventConsumer</a><o:p></o:p></p>

</div>

<div>

<p>&gt;&nbsp;<o:p></o:p></p>

</div>

<div>

<p>&gt;&nbsp;<o:p></o:p></p>

</div>

<div>

<p>&gt; Phillip Jones-2 wrote:<o:p></o:p></p>

</div>

<div>

<p>&gt; &gt;<o:p></o:p></p>

</div>

<div>

<p>&gt; &gt; Hi there,<o:p></o:p></p>

</div>

<div>

<p>&gt; &gt;<o:p></o:p></p>

</div>

<div>

<p>&gt; &gt; mod_managed exposes EventReceivedFunction such that:<o:p></o:p></p>

</div>

<div>

<p>&gt; &gt;<o:p></o:p></p>

</div>

<div>

<p>&gt; &gt; &nbsp;Session.EventReceivedFunction = (e) =&gt;<o:p></o:p></p>

</div>

<div>

<p>&gt; &gt; &nbsp;{<o:p></o:p></p>

</div>

<div>

<p>&gt; &gt; &nbsp; &nbsp; &nbsp; &nbsp;Log.WriteLine(LogLevel.Alert,
&quot;Received Event {0}&quot;, e.ToString());<o:p></o:p></p>

</div>

<div>

<p>&gt; &gt; &nbsp; &nbsp; &nbsp; &nbsp;return &quot;&quot;;<o:p></o:p></p>

</div>

<div>

<p>&gt; &gt; &nbsp;};<o:p></o:p></p>

</div>

<div>

<p>&gt; &gt;<o:p></o:p></p>

</div>

<div>

<p>&gt; &gt; should trap all events to which i subscribe.<o:p></o:p></p>

</div>

<div>

<p>&gt; &gt;<o:p></o:p></p>

</div>

<div>

<p>&gt; &gt;<o:p></o:p></p>

</div>

<div>

<p>&gt; &gt; But how do I subscribe to events? What is the .NET / managed
equivalent<o:p></o:p></p>

</div>

<div>

<p>&gt; &gt; of:<o:p></o:p></p>

</div>

<div>

<p>&gt; &gt;<o:p></o:p></p>

</div>

<div>

<p>&gt; &gt; switch_event_bind(const char *id, switch_event_types_t event,
const char<o:p></o:p></p>

</div>

<div>

<p>&gt; &gt; *subclass_name, switch_event_callback_t callback, void
*user_data);<o:p></o:p></p>

</div>

<div>

<p>&gt; &gt;<o:p></o:p></p>

</div>

<div>

<p>&gt; &gt;<o:p></o:p></p>

</div>

<div>

<p>&gt; &gt;<o:p></o:p></p>

</div>

<div>

<p>&gt; &gt; Thank you!<o:p></o:p></p>

</div>

<div>

<p>&gt; &gt;<o:p></o:p></p>

</div>

<div>

<p>&gt; &gt;<o:p></o:p></p>

</div>

<div>

<p>&gt; &gt;<o:p></o:p></p>

</div>

</div>

</div>

<p>&nbsp;<o:p></o:p></p>

</div>

</div>

<p style='margin-bottom:12.0pt'>_______________________________________________<br>
FreeSWITCH-users mailing list<br>
<a href="mailto:FreeSWITCH-users@lists.freeswitch.org" target="_blank">FreeSWITCH-users@lists.freeswitch.org</a><br>
<a href="http://lists.freeswitch.org/mailman/listinfo/freeswitch-users"
target="_blank">http://lists.freeswitch.org/mailman/listinfo/freeswitch-users</a><br>
UNSUBSCRIBE:<a
href="http://lists.freeswitch.org/mailman/options/freeswitch-users"
target="_blank">http://lists.freeswitch.org/mailman/options/freeswitch-users</a><br>
<a href="http://www.freeswitch.org/" target="_blank">http://www.freeswitch.org</a><o:p></o:p></p>

</blockquote>

</div>

<p>&nbsp;<o:p></o:p></p>

</div>

<p style='margin-bottom:12.0pt'><br>
_______________________________________________<br>
FreeSWITCH-users mailing list<br>
<a href="mailto:FreeSWITCH-users@lists.freeswitch.org" target="_blank">FreeSWITCH-users@lists.freeswitch.org</a><br>
<a href="http://lists.freeswitch.org/mailman/listinfo/freeswitch-users"
target="_blank">http://lists.freeswitch.org/mailman/listinfo/freeswitch-users</a><br>
UNSUBSCRIBE:<a
href="http://lists.freeswitch.org/mailman/options/freeswitch-users"
target="_blank">http://lists.freeswitch.org/mailman/options/freeswitch-users</a><br>
<a href="http://www.freeswitch.org/" target="_blank">http://www.freeswitch.org</a><o:p></o:p></p>

</div>

<p>&nbsp;<o:p></o:p></p>

</div>

</div>

</div>

<p style='margin-bottom:12.0pt'><br>
_______________________________________________<br>
FreeSWITCH-users mailing list<br>
<a href="mailto:FreeSWITCH-users@lists.freeswitch.org" target="_blank">FreeSWITCH-users@lists.freeswitch.org</a><br>
<a href="http://lists.freeswitch.org/mailman/listinfo/freeswitch-users"
target="_blank">http://lists.freeswitch.org/mailman/listinfo/freeswitch-users</a><br>
UNSUBSCRIBE:<a
href="http://lists.freeswitch.org/mailman/options/freeswitch-users"
target="_blank">http://lists.freeswitch.org/mailman/options/freeswitch-users</a><br>
<a href="http://www.freeswitch.org/" target="_blank">http://www.freeswitch.org</a><o:p></o:p></p>

</div>

<p>&nbsp;<o:p></o:p></p>

</div>

</div>

</div>

</div>

<p style='margin-bottom:12.0pt'><br>
_______________________________________________<br>
FreeSWITCH-users mailing list<br>
<a href="mailto:FreeSWITCH-users@lists.freeswitch.org" target="_blank">FreeSWITCH-users@lists.freeswitch.org</a><br>
<a href="http://lists.freeswitch.org/mailman/listinfo/freeswitch-users"
target="_blank">http://lists.freeswitch.org/mailman/listinfo/freeswitch-users</a><br>
UNSUBSCRIBE:<a
href="http://lists.freeswitch.org/mailman/options/freeswitch-users"
target="_blank">http://lists.freeswitch.org/mailman/options/freeswitch-users</a><br>
<a href="http://www.freeswitch.org" target="_blank">http://www.freeswitch.org</a><o:p></o:p></p>

</div>

<p>&nbsp;<o:p></o:p></p>

</div>

</div>

</div>

</div>

</div>

<p class=MsoNormal style='margin-bottom:12.0pt'><br>
_______________________________________________<br>
FreeSWITCH-users mailing list<br>
<a href="mailto:FreeSWITCH-users@lists.freeswitch.org" target="_blank">FreeSWITCH-users@lists.freeswitch.org</a><br>
<a href="http://lists.freeswitch.org/mailman/listinfo/freeswitch-users"
target="_blank">http://lists.freeswitch.org/mailman/listinfo/freeswitch-users</a><br>
UNSUBSCRIBE:<a
href="http://lists.freeswitch.org/mailman/options/freeswitch-users"
target="_blank">http://lists.freeswitch.org/mailman/options/freeswitch-users</a><br>
<a href="http://www.freeswitch.org" target="_blank">http://www.freeswitch.org</a><o:p></o:p></p>

</div>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

</div>

</div>

<p class=MsoNormal style='margin-bottom:12.0pt'><br>
_______________________________________________<br>
FreeSWITCH-users mailing list<br>
<a href="mailto:FreeSWITCH-users@lists.freeswitch.org">FreeSWITCH-users@lists.freeswitch.org</a><br>
<a href="http://lists.freeswitch.org/mailman/listinfo/freeswitch-users"
target="_blank">http://lists.freeswitch.org/mailman/listinfo/freeswitch-users</a><br>
UNSUBSCRIBE:<a
href="http://lists.freeswitch.org/mailman/options/freeswitch-users"
target="_blank">http://lists.freeswitch.org/mailman/options/freeswitch-users</a><br>
<a href="http://www.freeswitch.org" target="_blank">http://www.freeswitch.org</a><o:p></o:p></p>

</div>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

</div>

</body>

</html>