FreeSwitch ESL——Event Object,Connect Object(事件套接字的事件对象及连接对象)

2024-05-11 13:08

本文主要是介绍FreeSwitch ESL——Event Object,Connect Object(事件套接字的事件对象及连接对象),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Event Object

 

new

语法:

new($event_type [, $event_subclass])

作用:实例化一个新的事件对象,以便于使用以下的方法。

 

serialize

语法:

serialize([$format])

作用:将事件转化为冒号分割形如”name:value”的键对。$format的值可以为:

1.      “xml“

2.      “json”

3.      “plain”(default)

 

setPriority

语法:

setPriority([$number])

作用:设置事件的优先级

 

getHeader

语法:

getHeader($header_name)

作用:根据一个事件对象中的$header_name来获取头部值

 

getBody

语法:

getBody()

作用:获得事件对象的正文

 

getType

语法:

getType()

作用:获得事件对象的类型

 

addBody

语法:

addBody($value)

 

作用:将$value添加到事件对象的正文中。该对象可能在同一个事件对象中被多次调用

 

addHeader

语法:

addHeader($header_name, $value)

作用:向事件对象中添加一对值到头域中。该对象可能在同一个事件对象中被多次调用

 

delHeader

语法:

delHeader($header_name)

作用:在事件对象中删除名字叫$header_name的头域

 

firstHeader

语法:

firstHeader()

作用:将指针设置为指向事件对象的一个头域,并且返回第一个头域的键值。该函数必须在nextHeader对象调用前调用

 

nextHeader

语法:

nextHeader()

作用:将指针指向事件对象的下一个头域,并返回它的键值。调用它之前必须先调用firstHeader来设置指针!若当前位置已经是头域的最后一个节点,则调用该函数后将指向NULL

 

 

Connection Object

new

语法1:

new($host, $port, $password)

语法2:

new($fd)

作用:根据一个已存在的套接字句柄初始化一个ESL连接对象实例。

仅在Outbound(FreeSwitch作为客户端)模式下有效。即使在inbound模式下传递一个有效的套接字句柄也是无效的。

作用:初始化一个ESL连接对象实例。后面三个参数分别为主机名、端口号、密码。

 

该函数仅在inbound模式(FreeSwitch作为服务端)下有效。换而言之,该函数的目的是创建一个连接至FreeSWITCH的对象,并且它并未绑定到任何的呼叫或者信道上。

它并没有初始化通道信息(因为inbound连接并未绑定到任一个信道上)。简单来说,如果调用getInfo()函数永远返回NULL。

 

socketDescriptor

语法:

socketDescriptor()

作用:如果连接对象已连接,则返回该连接对象的UNIX文件描述句柄(FD)。

 

connected

语法:

connected()

作用:测试连接对象是否已连接。已连接则返回1,否则返回0

 

getInfo

语法:

getInfo()

作用:当FreeSwitch在outbound模式下连接时,它将在初始化阶段首先发送”CHANNEL_DATE”事件。该函数将返回跟该对象相关的信道信息。

当FreeSwitch在inbound模式下,将返回NULL

 

send

语法:

send($command)

作用:发送一个命令至FreeSwitch

它不会等待一个应答,而需要调用recvEvent或者recvEventTimed来循环等待接受事件。该应答将包含一个叫“content-type”的头域,该头域包含”api/response”或者“command/reply”的值。

为了自动等待应答事件,可以使用sendRecv()代替。

 

sendRecv

语法:

sendRecv($command)

作用:sendRecv($command)在调用的时候,会先调用send($command),然后在调用recvEvent(),然后返回一个ESL事件的实例。

recvEvent()会在一个循环中调用并一直阻塞知道收到一个头域包含”api/response”或者“command/reply”的值,然后再返回ESL事件对象实例。

在此期间收到的所有事件将保存到一个内部队列中,这些事件可以在后续的recvEvent()中取到。

 

api

语法:

api($command[, $arguments])

作用:向FreeSWITCH服务器发送一个API命令,这个命令将处于阻塞状态直到命令执行结束。

api($command,$args)等效于sendRecv(“api$command $args)

 

bgapi

语法:

bgapi($command[, $arguments][,$custom_job_uuid])

作用:向FreeSWITCH服务器发送一个后台API命令,该命令将在它自己的线程中执行。

bgapi($command,$args)等效于sendRecv(“bgapi$command $args)。

 

sendEvent

语法:

sendEvent($send_me)

作用:向FreeSwitch发送一个事件。

 

recvEvent

语法:

recvEvent()

作用:向FreeSwitch返回一个接收到的事件。如果接收到事件,该函数在处于阻塞状态,知道新事件来临。

如果在呼叫期间sendRecv()队列中有事件,那么队列中的第一个事件将被返回,并从队列中删除。换句话说,在连接中事件可以被读取。

 

recvEventTimed

语法:

recvEventTimed($milliseconds)

作用:类似于recvEvent(),但是它会阻塞$milliseconds毫秒.

如果将参数设置为0那么它将会立即返回,这个特性在轮询中特别有用。

 

filter

语法:

filter($header, $value)

作用:用于安装一个过滤器。该过滤器是对输入过滤,而不是对输出过滤。即符合条件的才能进入系统。

 

events

语法:

events($event_type,$value)

作用:$event_type的值可以为”plain“或者”xml”,其他任何输入都将被解释为”plain”

如果要调用myevents(event的一个特殊情况,用于outbound模式中)必须使用sendRecv(“myevents”)来调用,千万用events来调用。

 

execute

语法:

execute($app[, $arg][, $uuid])

作用:执行一个拨号计划的应用,并且等到从服务器发送过来的应答。套接字的连接不是固定在一个信道上(大部分情况下为inbound模式),三个参数都是必要的,其中uuid指明了为app指明了信道信息。

该函数将返回一个包含应答的ESL事件对象。通过getHeader(‘Reply-Text”)可以取出应答值。如果应答值为”+OK[Success Message]则表示成功,“-ERR [Error Message]表示失败。

可以通过以下的例子看看当调用excuse()命令后如何获取uuid。

 

在inbound模式下,可以根据以下命令获得一个新的uuid

$uuid = $esl->api("create_uuid")->getBody();

在outbound模式下,可以根据以下命令获得

$uuid = $esl->getInfo()->getHeader("unique-id")

 

 

executeAsync

语法:

executeAsync($app[, $arg][, $uuid])

作用:和execute一样,但是它在等待服务器应答的时候不会阻塞。其实这个函数本质上也是调用了execute()函数,只不过增加了”async:true”的头而已。

 

setAsyncExecute

语法:

setAsyncExecute($value)

作用:强制将套接字连接设置为异步模式。该命令在outbound模式下不起作用。

$value为1表示强制开启异步模式,0为同步模式。

特别要注意的是,调用setAsysncExecute(1)的本质就是调用带“asysnc:true”头的execute()函数。其他套接字路由不受此设置的影响。

 

setEventLock

语法:

setEventLock($value)

作用:强制让套接字连接打开同步模式。这个命令在outbound模式不起作用,因为在dialplan中没有将它设置为异步模式,因为这些连接已经处于同步模式了。

$value为1表示打开同步模式,0表示不强制打开。

要注意的是,调用setEventLock(1)的操作等价于调用带”event-lock:true”头的execute()函数。其他的事件套接字路由不受此设置的影响。

 

disconnect

语法:

disconnect()

作用:关闭连接

 

freeSwitch1.4版本(2014-02-16后的master版本)的C语言调用示例如下

 

int main(void)
{char *private_data = "some private string or struct ...";esl_global_set_default_logger(7);esl_listen_threaded("localhost", 8040, mycallback, private_data, 100000);return 0;}

Event Socket Command翻译出处:http://wiki.freeswitch.org/wiki/Event_Socket

其他翻译出处:https://freeswitch.org/confluence/display/FREESWITCH/Event+Socket+Library

这篇关于FreeSwitch ESL——Event Object,Connect Object(事件套接字的事件对象及连接对象)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/979616

相关文章

Python打印对象所有属性和值的方法小结

《Python打印对象所有属性和值的方法小结》在Python开发过程中,调试代码时经常需要查看对象的当前状态,也就是对象的所有属性和对应的值,然而,Python并没有像PHP的print_r那样直接提... 目录python中打印对象所有属性和值的方法实现步骤1. 使用vars()和pprint()2. 使

MySQL JSON 查询中的对象与数组技巧及查询示例

《MySQLJSON查询中的对象与数组技巧及查询示例》MySQL中JSON对象和JSON数组查询的详细介绍及带有WHERE条件的查询示例,本文给大家介绍的非常详细,mysqljson查询示例相关知... 目录jsON 对象查询1. JSON_CONTAINS2. JSON_EXTRACT3. JSON_TA

C#之List集合去重复对象的实现方法

《C#之List集合去重复对象的实现方法》:本文主要介绍C#之List集合去重复对象的实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C# List集合去重复对象方法1、测试数据2、测试数据3、知识点补充总结C# List集合去重复对象方法1、测试数据

java连接opcua的常见问题及解决方法

《java连接opcua的常见问题及解决方法》本文将使用EclipseMilo作为示例库,演示如何在Java中使用匿名、用户名密码以及证书加密三种方式连接到OPCUA服务器,若需要使用其他SDK,原理... 目录一、前言二、准备工作三、匿名方式连接3.1 匿名方式简介3.2 示例代码四、用户名密码方式连接4

MySQL 表的内外连接案例详解

《MySQL表的内外连接案例详解》本文给大家介绍MySQL表的内外连接,结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录表的内外连接(重点)内连接外连接表的内外连接(重点)内连接内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选,我

Spring中管理bean对象的方式(专业级说明)

《Spring中管理bean对象的方式(专业级说明)》在Spring框架中,Bean的管理是核心功能,主要通过IoC(控制反转)容器实现,下面给大家介绍Spring中管理bean对象的方式,感兴趣的朋... 目录1.Bean的声明与注册1.1 基于XML配置1.2 基于注解(主流方式)1.3 基于Java

C++/类与对象/默认成员函数@构造函数的用法

《C++/类与对象/默认成员函数@构造函数的用法》:本文主要介绍C++/类与对象/默认成员函数@构造函数的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录名词概念默认成员函数构造函数概念函数特征显示构造函数隐式构造函数总结名词概念默认构造函数:不用传参就可以

C++类和对象之默认成员函数的使用解读

《C++类和对象之默认成员函数的使用解读》:本文主要介绍C++类和对象之默认成员函数的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、默认成员函数有哪些二、各默认成员函数详解默认构造函数析构函数拷贝构造函数拷贝赋值运算符三、默认成员函数的注意事项总结一

Apache 高级配置实战之从连接保持到日志分析的完整指南

《Apache高级配置实战之从连接保持到日志分析的完整指南》本文带你从连接保持优化开始,一路走到访问控制和日志管理,最后用AWStats来分析网站数据,对Apache配置日志分析相关知识感兴趣的朋友... 目录Apache 高级配置实战:从连接保持到日志分析的完整指南前言 一、Apache 连接保持 - 性

电脑蓝牙连不上怎么办? 5 招教你轻松修复Mac蓝牙连接问题的技巧

《电脑蓝牙连不上怎么办?5招教你轻松修复Mac蓝牙连接问题的技巧》蓝牙连接问题是一些Mac用户经常遇到的常见问题之一,在本文章中,我们将提供一些有用的提示和技巧,帮助您解决可能出现的蓝牙连接问... 蓝牙作为一种流行的无线技术,已经成为我们连接各种设备的重要工具。在 MAC 上,你可以根据自己的需求,轻松地