lua 脚本在智能逻辑面板中实际应用
Posted qianbo_insist
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了lua 脚本在智能逻辑面板中实际应用相关的知识,希望对你有一定的参考价值。
上一边文章写lua的
lua 在gb28181中流程化技巧
下面写一个实际的作用,流程需要脚本化的程序,如
1 游戏逻辑
2 智能逻辑面板
逻辑面板的意思是通过拖拉的方式奠定程序的逻辑基础,这一定其实是和游戏非常相似。
c++ 程序
extern "C"
#include "../lualib/lua.h"
#include "../lualib/lualib.h"
#include "../lualib/lauxlib.h"
int main(int argc, char *argv[])
/* 初始化Lua */
L = luaL_newstate();
/* 载入Lua基本库 */
luaL_openlibs(L);
/* 注册函数 */
lua_register(L, "average", average);
luaopen_mLualib(L);
luaL_dofile(L, "test2.lua");
lua_getglobal(L, "mystr");
string str = lua_tostring(L, -1);
cout << str << endl;
lua_getglobal(L, "myTable");
lua_getfield(L, -1, "name");
cout << lua_tostring(L, -1) << endl;
lua_getglobal(L, "myTable");
lua_getfield(L, -1, "id");
cout << lua_tostring(L, -1) << endl;
lua_getglobal(L, "main");
lua_pushstring(L, "rtsp://127.0.0.1/live/1");
lua_pushnumber(L, 10);
lua_pushnumber(L, 20);
lua_pcall(L, 3, 1, 0);
cout << lua_tostring(L, -1) << endl;
lua_close(L);
/* 暂停 */
printf("Press enter to exit…");
getchar();
return 0;
上面这一段程序非常简单,我们定有这样一个逻辑,我们要拉取一个流,是媒体逻辑中的一个rtsp协议的流,关于什么是rtsp协议,希望大家自己熟悉好,我们会从url中计算相应的实际媒体服务器地址。
例如这一段地址为
lua_pushstring(L, “rtsp://127.0.0.1/live/88000013200001”);
说明他的rtsp地址是 rtsp://127.0.0.1/live/88000013200001
而这个地址实际的IP我们只是使用了127.0.0.1 ,实际上我们会拿到真实的地址返回给程序
lua 脚本
下面是lua程序
mystr = "192.168.1.129"
myTable = name = "推理服务1", id = 123456 , ip= "192.168.0.111"
function main(szName, num1, num2)
print("main()", szName, num1, num2);
if(num1 < 100)
then
print("num1<100")
else
print("num1>100")
end
local num = string.find (szName, "://",1 )
print(num)
--local nRandMax = 10000;
--local nRand = math.random(nRandMax);
--print("nRand =", nRand)
if(connect < 100)
then
print("connect<100")
else
print("connect>100")
end
local num = string.find (szName, "://",1 )
print(num)
--local nRandMax = 10000;
--local nRand = math.random(nRandMax);
--print("nRand =", nRand)
local mystr1 = mystr
--mystr1 +=","
mystr1 = mystr1 .. "," .. myTable.ip
return mystr1;
end
在脚本里面返回了媒体服务器地址和推理服务器地址,程序获取后就可以做出选择了。这个是比较简单的写在了脚本文件里面,实际上,在脚本里面是应该使用逻辑方式获取真实的地址,这里为了简单,直接写在了里面。
通信问题
使用lua 使用通信如tcp,udp,应用层http,甚至https协议是非常好的,这样很多简单的交互逻辑和通信地址等等使用lua脚本化方式进行获取,避免了脚本方式的重新加载文件,可以做到热更新。展示一个简单的socket udp server脚本
-- Server
--!/usr/bin/env lua5.1
local socket = require("socket")
udp = socket.udp()
udp:setsockname("*", 7000)
udp:settimeout(0)
while true do
data, ip, port = udp:receivefrom()
if data then
print("Received: ", data, ip, port)
udp:sendto(data, ip, port)
end
socket.sleep(0.01)
end
以上是关于lua 脚本在智能逻辑面板中实际应用的主要内容,如果未能解决你的问题,请参考以下文章