Modified: freeswitch/trunk/libs/esl/managed/ManagedEslTest/Program.cs (16540 => 16541)
--- freeswitch/trunk/libs/esl/managed/ManagedEslTest/Program.cs 2010-01-30 02:55:49 UTC (rev 16540)
+++ freeswitch/trunk/libs/esl/managed/ManagedEslTest/Program.cs 2010-01-30 05:32:56 UTC (rev 16541)
@@ -1,23 +1,201 @@
-using System;
+/*
+ * C# ESL managed examples
+ *
+ * Version: MPL 1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * Contributor:
+ * Diego Toro <dftoro@yahoo.com>
+ */
+using System;
+using System.Net;
+using System.Net.Sockets;
+using System.Threading;
+
namespace ManagedEslTest
{
+ [Flags]
+ public enum enLogLevel
+ {
+ EMERG = 0,
+ ALERT,
+ CRIT,
+ ERROR,
+ WARNING,
+ NOTICE,
+ INFO,
+ DEBUG
+ }
+
+
class Program
{
+ public static readonly int ESL_SUCCESS = 1;
+
static void Main(string[] args)
{
- // Connect to FreeSWITCH
+ /*
+ * The next lines are usefull to view simples C# examples about how ESL managed works.
+ * Active only a mode uncomment it: inbound, outbound sync or outbound async.
+ * If you active two o more on this application you may have problems.
+ * Remember modify your dialplan for testing outbound modes (see OutboundModeSync and OutboundModeAsync members)
+ */
+ ThreadPool.QueueUserWorkItem(new WaitCallback(InboundMode));
+ //ThreadPool.QueueUserWorkItem(new WaitCallback(OutboundModeSync));
+ //ThreadPool.QueueUserWorkItem(new WaitCallback(OutboundModeAsync));
+
+ Console.ReadLine();
+ }
+
+ /// <summary>
+ /// Example using event socket in "Inbound" mode
+ /// </summary>
+ /// <param name="stateInfo">Object state info</param>
+ static void InboundMode(Object stateInfo)
+ {
+ //Initializes a new instance of ESLconnection, and connects to the host $host on the port $port, and supplies $password to freeswitch
ESLconnection eslConnection = new ESLconnection("localhost", "8021", "ClueCon");
- // We want all Events (probably will want to change this depending on your needs)
- eslConnection.SendRecv("event plain ALL");
+ if (eslConnection.Connected() != ESL_SUCCESS)
+ {
+ Console.WriteLine("Error connecting to FreeSwitch");
+ return;
+ }
+ //Set log level
+ //ESL.eslSetLogLevel((int)enLogLevel.DEBUG);
+
+ // Subscribe to all events
+ ESLevent eslEvent = eslConnection.SendRecv("event plain ALL");
+
+ if (eslEvent == null)
+ {
+ Console.WriteLine("Error subscribing to all events");
+ return;
+ }
+
+ //Turns an event into colon-separated 'name: value' pairs. The format parameter isn't used
+ Console.WriteLine(eslEvent.Serialize(String.Empty));
+
// Grab Events until process is killed
- while (eslConnection.Connected() == 1)
+ while (eslConnection.Connected() == ESL_SUCCESS)
{
- ESLevent eslEvent = eslConnection.RecvEvent();
+ eslEvent = eslConnection.RecvEvent();
Console.WriteLine(eslEvent.Serialize(String.Empty));
}
}
+
+ /// <summary>
+ /// Example using event socket in "Outbound" mode synchronic
+ /// </summary>
+ /// <param name="stateInfo">Object state info</param>
+ static void OutboundModeSync(Object stateInfo)
+ {
+ /* add next line to a dialplan
+ <action application="socket" data="localhost:8022 sync full"/>
+ */
+ TcpListener tcpListener = new TcpListener(IPAddress.Parse("127.0.0.1"), 8022);
+
+ try
+ {
+ tcpListener.Start();
+
+ Console.WriteLine("OutboundModeSync, waiting for a connection...");
+
+ while (true)
+ {
+ Socket sckClient = tcpListener.AcceptSocket();
+
+ //Initializes a new instance of ESLconnection, and connects to the host $host on the port $port, and supplies $password to freeswitch
+ ESLconnection eslConnection = new ESLconnection(sckClient.Handle.ToInt32());
+
+ Console.WriteLine("Execute(\"answer\")");
+ eslConnection.Execute("answer", String.Empty, String.Empty);
+ Console.WriteLine("Execute(\"playback\")");
+ eslConnection.Execute("playback", "music/8000/suite-espanola-op-47-leyenda.wav", String.Empty);
+ Console.WriteLine("Execute(\"hangup\")");
+ eslConnection.Execute("hangup", String.Empty, String.Empty);
+ }
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine(ex);
+ }
+ finally
+ {
+ tcpListener.Stop();
+ }
+ }
+
+ /// <summary>
+ /// Example using event socket in "Outbound" mode asynchronic
+ /// </summary>
+ /// <param name="stateInfo">Object state info</param>
+ static void OutboundModeAsync(Object stateInfo)
+ {
+ /* add next line to a dialplan
+ <action application="socket" data="localhost:8022 async full" />
+ */
+ TcpListener tcpListener = new TcpListener(IPAddress.Parse("127.0.0.1"), 8022);
+
+ try
+ {
+ tcpListener.Start();
+
+ Console.WriteLine("OutboundModeAsync, waiting for connections...");
+
+ while (true)
+ {
+ tcpListener.BeginAcceptSocket((asyncCallback) =>
+ {
+ TcpListener tcpListened = (TcpListener)asyncCallback.AsyncState;
+
+ Socket sckClient = tcpListened.EndAcceptSocket(asyncCallback);
+
+ //Initializes a new instance of ESLconnection, and connects to the host $host on the port $port, and supplies $password to freeswitch
+ ESLconnection eslConnection = new ESLconnection(sckClient.Handle.ToInt32());
+
+ ESLevent eslEvent = eslConnection.GetInfo();
+ string strUuid = eslEvent.GetHeader("UNIQUE-ID");
+
+ eslConnection.SendRecv("myevents");
+ eslConnection.SendRecv("divert_events on");
+
+ eslConnection.Execute("answer", String.Empty, String.Empty);
+ eslConnection.Execute("playback", "music/8000/suite-espanola-op-47-leyenda.wav", String.Empty);
+
+ while (eslConnection.Connected() == ESL_SUCCESS)
+ {
+ eslEvent = eslConnection.RecvEvent();
+ Console.WriteLine(eslEvent.Serialize(String.Empty));
+ }
+
+ sckClient.Close();
+ Console.WriteLine("Connection closed uuid:{0}", strUuid);
+
+ }, tcpListener);
+
+ Thread.Sleep(50);
+ }
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine(ex);
+ }
+ finally
+ {
+ tcpListener.Stop();
+ }
+ }
}
}