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 脚本在智能逻辑面板中实际应用的主要内容,如果未能解决你的问题,请参考以下文章

lua脚本在游戏中的应用

使用lua脚本为你的nginx增加一份色彩

Lua语言学习笔记

Redis 中使用 Lua 脚本

Lua 和 C# 的进程间通信

请问自己的软件如何运行Lua脚本