[Freeswitch-users] Subscribing to events in managed C# / .NET

Michael Giagnocavo mgg at giagnocavo.net
Tue Sep 8 09:43:00 PDT 2009


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<mailto: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<mailto: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<mailto: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<mailto: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<mailto: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<http://www.freeswitch.org/>


_______________________________________________
FreeSWITCH-users mailing list
FreeSWITCH-users at lists.freeswitch.org<mailto: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<http://www.freeswitch.org/>


_______________________________________________
FreeSWITCH-users mailing list
FreeSWITCH-users at lists.freeswitch.org<mailto: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<http://www.freeswitch.org/>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.freeswitch.org/pipermail/freeswitch-users/attachments/20090908/20840b11/attachment-0002.html 


More information about the FreeSWITCH-users mailing list