[Freeswitch-users] C# new ESLevent(
Kris
kris at livecall.com
Tue Jan 18 06:46:53 MSK 2011
I don't know about ESL-still very new to FS. I should look at that. If you
figure it out, send some of the code here.
I used this to notify my running DLL that a new one is being loaded, then
start a new thread to pop events. It works and pulls events fine. I still
have a problem where freeswitch crashes toward the end of it's shutdown so
something is not being freed or is corrupted.(switch_core_memory.c:587
Stopping memory pool queue) is the last written on the screen.
If someone knows why, let me know.
Kris
public class Loading : FreeSWITCH.ILoadNotificationPlugin
{
public bool Load()
{
Event loading_event = new Event("CUSTOM",
"livematch::maintenance");
loading_event.AddHeader("Action", "loading");
loading_event.Fire();
freeswitch.msleep(500);
ManagedApplicationBase.LoadSettings(); //from the Database
ManagedApplicationBase.StartEventThread();// this does the pop
in a thread, terminates itself on the next loading event.
}
abstract public class ManagedApplicationBase : IAppPlugin, IApiPlugin
{
//common Parameters
public static bool ParmUsingWatchdogTimer=true;
public static bool LoadingNewDLL = false;
public static bool FreeSwitchShutdown = false;
public static bool EventThreadStarted = false;
public static System.Threading.Thread EventThread = new
System.Threading.Thread(new System.Threading.ThreadStart(CheckEvents));
.......
static private void CheckEvents()//runs only in the new thread
{
BaseLog.WriteLine(BaseLogLevel.Info, "Starting CheckEvents");
string EventName;
ODBCData Data = new
ODBCData(global::LiveMatch.Properties.Settings.Default.ODBCConnectionMain);
ODBCData CallsData = new
ODBCData(global::LiveMatch.Properties.Settings.Default.LMCallDetailsConnectionMain);
FreeSWITCH.Native.Api fsApi = new FreeSWITCH.Native.Api();
// EventConsumer con_CUSTOM = new EventConsumer("CUSTOM",
"Conference::Maintenance");
EventConsumer con_all = new EventConsumer("ALL", null);
while (!FreeSwitchShutdown && !LoadingNewDLL) // {
Event ev_all = con_all.pop(0);
if (ev_all != null)
{
EventName = ev_all.GetHeader("Event-Name");
switch (EventName)
{
case "HEARTBEAT":
Log.WriteLine(LogLevel.Notice, "Got event " +
EventName);
BaseLog.WriteLine(BaseLogLevel.FSEVENT,
ev_all.Serialize("xml"));
if(ParmUsingWatchdogTimer)
Data.SaveParameter(SystemInformation.ComputerName,
Parameters.SPARAMETER_WATCHDOG_TIME, DateTime.Now.ToString("MM/dd/yyyy
HH:mm:ss"));//12/11/2010 03:53:02
break;
case "CHANNEL_HANGUP_COMPLETE":
Log.WriteLine(LogLevel.Notice, "Got event " +
EventName);
BaseLog.WriteLine(BaseLogLevel.FSEVENT,
ev_all.Serialize("xml"));
string SQL = String.Format("UPDATE Calls SET
StopTime='{0}' WHERE CallGUID='{1}'",
DateTime.UtcNow.ToString("MM/dd/yyyy
HH:mm:ss.fff"), ev_all.GetHeader("Caller-Unique-ID"));
CallsData.ExecuteSQL(SQL);
break;
case "SHUTDOWN":
Log.WriteLine(LogLevel.Notice, "Got event " +
EventName);
BaseLog.WriteLine(BaseLogLevel.FSEVENT,
ev_all.Serialize("xml"));
FreeSwitchShutdown = true;
BaseLog.WriteLine(BaseLogLevel.FSEVENT, "Exiting
CheckEvents");
BaseLog.SwitchShutdown = true; //to prevent
further writing
goto EXIT;
case "CUSTOM":
Log.WriteLine(LogLevel.Notice, "Got event " +
EventName);
// //ManagedSession
Session = new ManagedSession(ev_all.GetHeader("Caller-Unique-ID"));
switch (ev_all.GetHeader("Event-Subclass"))
{
case "conference::maintenance":
Log.WriteLine(LogLevel.Notice,
"Event-Subclass " + ev_all.GetHeader("Event-Subclass"));
switch (ev_all.GetHeader("Action"))
{
case "del-member":
Log.WriteLine(LogLevel.Notice,
"Action " + ev_all.GetHeader("Action"));
//member is leaving or hung up?
//update Conferences SET
break;
default:
Log.WriteLine(LogLevel.Notice,
"Action " + ev_all.GetHeader("Action"));
break;
}
break;
case "livematch::maintenance":
Log.WriteLine(LogLevel.Notice,
"Event-Subclass " + ev_all.GetHeader("Event-Subclass"));
switch (ev_all.GetHeader("Action"))
{
case "loading": //a new version is
loading, terminate this one
Log.WriteLine(LogLevel.Notice,
"Action " + ev_all.GetHeader("Action"));
FreeSwitchShutdown = true;
LoadingNewDLL = true;
break;
default:
Log.WriteLine(LogLevel.Notice,
"Action " + ev_all.GetHeader("Action"));
break;
}
break;
default:
Log.WriteLine(LogLevel.Notice,
"Event-Subclass " + ev_all.GetHeader("Event-Subclass"));
break;
}
----- Original Message -----
From: "John Rose" <johnrose at comtex.net>
To: <freeswitch-users at lists.freeswitch.org>
Sent: Monday, January 17, 2011 4:36 PM
Subject: [Freeswitch-users] C# new ESLevent(
> Does someone have an example of the C# EslConnection method SendEvent with
> a
> new ESLevent ?
>
>
>
> Like how to fill in any info on the ESLevent object before sending it?
>
>
>
> Thanks,
>
> John
>
>
More information about the FreeSWITCH-users
mailing list