123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201 |
- /*
- * 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)
- {
- /*
- * 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("127.0.0.1", "8021", "ClueCon");
- 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() == ESL_SUCCESS)
- {
- 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", -1);
- 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();
- }
- }
- }
- }
|