[Freeswitch-users] Subscribing to events in managed C# / .NET
Raffaele P. Guidi
raffaele.p.guidi at gmail.com
Tue Sep 8 14:20:49 PDT 2009
Oh, I see... all those years wasted doing java stuff! :D
On Tue, Sep 8, 2009 at 22:46, Michael Giagnocavo <mgg at giagnocavo.net> wrote:
> “ ThreadPool.QueueUserWorkItem((o) =>”
>
> That starts a lambda, which is compiled to a delegate, same as anonymous
> methods.
>
> Guess I’ll wait for him to respond on the crash he gets.
>
>
>
>
>
> *From:* freeswitch-users-bounces at lists.freeswitch.org [mailto:
> freeswitch-users-bounces at lists.freeswitch.org] *On Behalf Of *Raffaele P.
> Guidi
> *Sent:* Tuesday, September 08, 2009 12:22 PM
>
> *To:* freeswitch-users at lists.freeswitch.org
> *Subject:* Re: [Freeswitch-users] Subscribing to events in managed C# /
> .NET
>
>
>
> Well, I can't see any delegate in josh sample, just a
> ThreadPool.QueueUserWorkItem. Here is an example that, at least on my
> system (I reached my home pc in the meanwhile), works fine.
>
>
>
> public class LoadPluginDemo : ILoadNotificationPlugin {
>
> delegate void Listener();
>
> private void EventListener() {
>
> EventConsumer con = new EventConsumer("all", null);
>
> while (true){
>
> Event ev = con.pop(1);
>
> Log.WriteLine(LogLevel.Notice, "Got event " +
> ev.GetHeader("Event-Name"));
>
> }
>
> }
>
> public bool Load() {
>
> Log.WriteLine(LogLevel.Notice, "LoadDemo running.");
>
> new Listener(EventListener).BeginInvoke(null,null);
>
> return true;
>
> }
>
> }
>
>
>
>
>
>
>
> On Tue, Sep 8, 2009 at 18:43, Michael Giagnocavo <mgg at giagnocavo.net>
> wrote:
>
> That’s what his sample does, but he says it crashes.
>
>
>
> *From:* freeswitch-users-bounces at lists.freeswitch.org [mailto:
> freeswitch-users-bounces at lists.freeswitch.org] *On Behalf Of *Raffaele P.
> Guidi
> *Sent:* Tuesday, September 08, 2009 10:08 AM
>
>
> *To:* freeswitch-users at lists.freeswitch.org
> *Subject:* Re: [Freeswitch-users] Subscribing to events in managed C# /
> .NET
>
>
>
> 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).
>
>
>
> Regards,
>
> Raffaele
>
>
>
> public class TestLoop : ILoadNotificationPlugin
>
> {
>
>
>
> Delegate void DoStuffDelegate();
>
>
>
> public void doStuff()
>
> {
>
> EventConsumer con = new EventConsumer("all", "");
>
> while (true)
>
> {
>
> Event ev = con.pop(0);
>
> Log.WriteLine(LogLevel.Notice, "Event: " +
> ev.serialized_string);
>
> freeswitch.msleep(100);
>
> }
>
> }
>
> public bool Load()
>
> {
>
> DoStuffDelegate dsdlg = new DoStuffDelegate(doStuff);
>
> dsdlg.BeginInvoke();
>
> }
>
> }
>
> On Tue, Sep 8, 2009 at 08:21, Josh Rivers <josh at radianttiger.com> wrote:
>
> Thanks for the response!
>
>
>
> I have tried putting a long-running loop here, but then it blocks anything
> else managed from happening:
>
>
>
> public class TestLoop : ILoadNotificationPlugin
>
> {
>
> public bool Load()
>
> {
>
> EventConsumer con = new EventConsumer("all", "");
>
> while (true)
>
> {
>
> Event ev = con.pop(0);
>
> Log.WriteLine(LogLevel.Notice, "Event: " +
> ev.serialized_string);
>
> freeswitch.msleep(100);
>
> }
>
> }
>
> }
>
>
>
> However, if I fork off a thread here, freeswitch crashes:
>
> public class TestLoop : ILoadNotificationPlugin
>
> {
>
> public bool Load()
>
> {
>
> ThreadPool.QueueUserWorkItem((o) =>
>
> {
>
> Log.WriteLine(LogLevel.Notice, "Thread Starting. ");
>
> EventConsumer con = new EventConsumer("all", "");
>
> while (true)
>
> {
>
> Event ev = con.pop(0);
>
> Log.WriteLine(LogLevel.Notice, "Event: " +
> ev.serialized_string);
>
> freeswitch.msleep(100);
>
> }
>
> });
>
> return true;
>
> }
>
> }
>
>
>
> It doesn't look like this is a good place to start a long-running process?
>
>
>
> Thanks!
>
> Josh
>
>
>
> On Mon, Sep 7, 2009 at 11:05 PM, Raffaele P. Guidi <
> raffaele.p.guidi at gmail.com> wrote:
>
> Yes!
>
>
>
> public class LoadDemo : ILoadNotificationPlugin {
>
> public bool Load() {
>
> Log.WriteLine(LogLevel.Notice, "LoadDemo running.");
>
> return true;
>
> }
>
> }
>
>
>
> this example is from Michael Giagnocavo's Demo.csx which you can find into
> the mod_managed svn.
>
>
>
> And let me add that works like a charm :)
>
>
>
> Ciao,
>
> Raffaele
>
>
>
> On Sun, Sep 6, 2009 at 22:50, Josh Rivers <josh at radianttiger.com> wrote:
>
> 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?
>
>
>
> <quote author="Phillip Jones">
>
> Exactly what I was after - thank you!
>
>
>
> On Thu, Sep 3, 2009 at 1:54 PM, Jeff Lenk <jlenk at frontiernet.net> wrote:
>
>
>
> >
>
> > try something like this
>
> >
>
> > EventConsumer con = new EventConsumer("all", "");
>
> > Event ev = con.pop(0);
>
> >
>
> > see lua sample -
>
> > http://wiki.freeswitch.org/wiki/Lua#freeswitch.EventConsumer
>
> >
>
> >
>
> > Phillip Jones-2 wrote:
>
> > >
>
> > > Hi there,
>
> > >
>
> > > mod_managed exposes EventReceivedFunction such that:
>
> > >
>
> > > Session.EventReceivedFunction = (e) =>
>
> > > {
>
> > > Log.WriteLine(LogLevel.Alert, "Received Event {0}",
> e.ToString());
>
> > > return "";
>
> > > };
>
> > >
>
> > > should trap all events to which i subscribe.
>
> > >
>
> > >
>
> > > But how do I subscribe to events? What is the .NET / managed equivalent
>
> > > of:
>
> > >
>
> > > switch_event_bind(const char *id, switch_event_types_t event, const
> char
>
> > > *subclass_name, switch_event_callback_t callback, void *user_data);
>
> > >
>
> > >
>
> > >
>
> > > Thank you!
>
> > >
>
> > >
>
> > >
>
>
>
> _______________________________________________
> FreeSWITCH-users mailing list
> FreeSWITCH-users at lists.freeswitch.org
> http://lists.freeswitch.org/mailman/listinfo/freeswitch-users
> UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users
> http://www.freeswitch.org
>
>
>
>
> _______________________________________________
> FreeSWITCH-users mailing list
> FreeSWITCH-users at lists.freeswitch.org
> http://lists.freeswitch.org/mailman/listinfo/freeswitch-users
> UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users
> http://www.freeswitch.org
>
>
>
>
> _______________________________________________
> FreeSWITCH-users mailing list
> FreeSWITCH-users at lists.freeswitch.org
> http://lists.freeswitch.org/mailman/listinfo/freeswitch-users
> UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users
> http://www.freeswitch.org
>
>
>
>
> _______________________________________________
> FreeSWITCH-users mailing list
> FreeSWITCH-users at lists.freeswitch.org
> http://lists.freeswitch.org/mailman/listinfo/freeswitch-users
> UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users
> http://www.freeswitch.org
>
>
>
> _______________________________________________
> FreeSWITCH-users mailing list
> FreeSWITCH-users at lists.freeswitch.org
> http://lists.freeswitch.org/mailman/listinfo/freeswitch-users
> UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users
> http://www.freeswitch.org
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.freeswitch.org/pipermail/freeswitch-users/attachments/20090908/18bc8736/attachment-0002.html
More information about the FreeSWITCH-users
mailing list