Lua是一种 简单、可扩展、可移植及高效的脚本语言
是一种面向 C 的 API 存在一个特别的 虚拟栈 ,通过这个栈与lua交换数据
栈大大简化了C API 的设计与使用,还能保证 其他语言与lua 有效的隔离开
从设计目的来讲:
1就是某一个功能模块,通过lua进行扩展
2想只靠lua开发程序,是不太现实的
FREESWITCH中录音你如果要搞到LUA脚本里就麻烦了,直接在dialplan里面就能录音。
<action application="set" data="execute_on_answer=record_session /data/media/${strftime(%Y%m%d)}/${strftime(%Y%m%d%H)}/${uuid}_$1_${caller_id_number}wav"/>
时间也都是从FS上面获取到传进LUA脚本里的。我是这么使用的。
Lua api函数的总结要告一段落了,从今天开始我要回归到Lua,我们来一起看看在lua函数里有哪些函数我们会经常用到,现在我们来接触第一个函数osclock()。还是先上例子,之后我们来一起分析一下。
其中有个 CLOCKS_PER_SEC 值,在不同平台有着不同的定义,所以一定要注意函数的溢出问题,程序运行时间太长的话,使用 clock 有可能就会返回负数。
FreeSWITCH中的lua *** 作小结
lua中设置当前通道变量:
方法一:
session:setVariable("fullName", "xxxxx");--需判断session是否为空
方法二:
local uuid =getUUID(callerid);
local res=api:executeString("uuid_setvar " uuid " fullName ""xxxxxxx")
该处设置的变量可以是通道中本没有的变量,设置完了后,在其他地方就可以引用该变量。
lua中设置全局通道变量(在varsxml中设置)
local ucall_ip = api:executeString("global_setvar qt_ucall_ip_port 192168032:9090");
获取当前的通道变量
local callee_num=session:getVariable("qt_ucall_callee");
获取全局通道变量
local ucall_ip = api:executeString("global_getvar qt_ucall_ip_port");
获取当前会话uuid
session:get_uuid()
获取当前路径
--USwitch的当前安装目录
syspath = tostring(api:execute("global_getvar", "base_dir"));
使用uuid_transfer将当前对话的两个号码同时转入会议中
local trf1="uuid_transfer " guestuuid " -both " conferenceNum;
OutputConsoleLog("info" , scriptname ": try to get guestNum to conference,command is{"trf1"}");
api:executeString(trf1);
外呼方法总结:
originate user/11103139316095XX
originate sofia/external/139316095XX@192168234 &playback(calloutmusic/welcometoyoump3)
originate loopback/139316095XX&playback(calloutmusic/20110126164156mp3)
在lua脚本中放一段录音
session:streamFile("notondutywav");
判断会话是否已建立
session:ready()==true
挂断当前会话
session:hangup();
将当前会话休眠一段时间
session:sleep(5000);
发起>
C调Lua:通过lua的api,C把函数压入lua栈,然后lua_pcall让lua环境去执行
Lua调C:通过lua的api,C把自己的函数注册到lua执行环境中,lua脚本可以像使用普通函数一样使用C函数
1编程接口就是对于某种逻辑写的一定规范的数据格式,
就是宿主程序跟 Lu通讯用的一组 C 函数。 所有的 API 函数按相关的类型以及常量都声明在头文件 luah 中。
2虽然我们说的是“函数”, 但一部分简单的 API 是以宏的形式提供的。
除非另有说明, 所有的这些宏都只使用它们的参数一次 (除了第一个参数,那一定是 Lu状态), 因此你不需担心这些宏的展开会引起一些副作用。
3C 库中所有的 Lua API 函数都不去检查参数是否相容及有效。
然而,你可以在编译 Lu 时加上打开一个宏开关 LUA_USE_APICHECK 来改变这个行为。
Lu使用一个 虚拟栈 来和 C 互传值。 栈上的的每个元素都是一个 Lu 值 (nil,数字,字符串,等等)。
4无论何时 Lua 调用 C,被调用的函数都得到一个新的栈,
这个栈独立于 C 函数本身的栈,也独立于之前的 Lu栈。 它里面包含了 Lu传递给 C 函数的所有参数, 而 C 函数则把要返回的结果放入这个栈以返回给调用者。
5方便起见, 所有针对栈的 API 查询 *** 作都不严格遵循栈的 *** 作规则。
而是可以用一个 索引 来指向栈上的任何元素: 正的索引指的是栈上的绝对位置(从1开始); 负的索引则指从栈顶开始的偏移量。 展开来说,如果堆栈有 n 个元素, 那么索引 1 表示第一个元素 (也就是最先被压栈的元素) 而索引 n 则指最后一个元素; 索引 -1 也是指最后一个元素 (即栈顶的元素), 索引 -n 是指第一个元素。
42 – 栈大小
5当你使用 Lu API 时, 就有责任保证做恰当的调用。 特别需要注意的是, 你有责任控制不要堆栈溢
以上就是关于指令loadx是哪一种类型全部的内容,包括:指令loadx是哪一种类型、扩展语言lua有哪些数据类型呢、什么是Lua等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)