appstack

package
v0.6.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 15, 2023 License: AGPL-3.0 Imports: 7 Imported by: 0

README

APP STACK: 轻量级应用管理器

1677937660104 本特性用来运行本地化的轻量级业务功能,其原理是用 lua 虚拟机做运行时,lua 模块代码作为应用。该特性短时间内不会开启,预计会在0.7版本中发布。

架构设计

下图是 RULEX 和 APP STACK 组件之间的关联关系,APP STACK RUNTIME 本身也是用 go 开发的一套lua虚拟机,虽然性能来说比不过 C 语言原生的,但是目前来说性能完全足够了。

1677936533365

场景

该功能主要用来实现本地化的多样需求,比如内网部署的时候,需要读取一些设备的信息,判断后处理,这个过程其实是个业务逻辑,和 RULEX 的和兴功能有区别,RULEX 核心本质上是个规则过滤器,而不是业务执行器。

用户接口

用户通过lua来实现自己的业务,每个业务一个lua文本,其中lua文本模板如下。

-- 应用名称
AppNAME = "test_demo"
-- 版本信息,必须符合 x.y.z 格式
AppVERSION = "1.0.0"
-- 关于这个应用的一些描述信息
AppDESCRIPTION = "A demo app"
-- 必须包含 APPMain(arg) 函数作为 app 启动点
function Main(arg)
	while true do
		local value, err = eekith3:GPIOGet(6)
		if err ~= nil
		then
			print(err)
		else
			print("value ok:", value)
		end
	end
end

内部原理

首先用户在编辑器里面写一段 lua 代码,然后 rulex 会加载这段 lua 代码执行。代码最终被保存在本地。

示例

下面展示一个数据推送到 HTTP Server 的案例

AppNAME = "test_demo"
AppVERSION = "1.0.0"
AppDESCRIPTION = "A demo app"

function Main(arg)
	for i = 1, 10, 1 do
		local err = applib:DataToHttp('OUTaaabbd23d1094c81af2874ce4ad1af55', applib:T2J({
			temp = i,
			humi = 13.45
		}))
		print("err =>", err)
		applib:Sleep(1000)
	end
	return 0
end

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func LoadAppLib

func LoadAppLib(app *typex.Application, e typex.RuleX)

* * 加载app库函数, 注意这里的库函数和规则引擎的并不是完全一样的,有一些差别 *

func NewAppStack

func NewAppStack(re typex.RuleX) typex.XAppStack

func ValidateLuaSyntax

func ValidateLuaSyntax(bytes []byte) error

临时校验语法

Types

type AppStack

type AppStack struct {
	// contains filtered or unexported fields
}

* * 管理器 *

func (*AppStack) GetApp

func (as *AppStack) GetApp(uuid string) *typex.Application

func (*AppStack) GetRuleX

func (as *AppStack) GetRuleX() typex.RuleX

func (*AppStack) ListApp

func (as *AppStack) ListApp() []*typex.Application

* * 获取列表 *

func (*AppStack) LoadApp

func (as *AppStack) LoadApp(app *typex.Application) error

* * 加载本地文件到lua虚拟机, 但是并不执行 *

func (*AppStack) RemoveApp

func (as *AppStack) RemoveApp(uuid string) error

* * 从内存里面删除APP *

func (*AppStack) StartApp

func (as *AppStack) StartApp(uuid string) error

* 此时才是真正的启动入口: * 启动 function Main(args) --do-some-thing-- return 0 end *

func (*AppStack) Stop

func (as *AppStack) Stop()

func (*AppStack) StopApp

func (as *AppStack) StopApp(uuid string) error

* * 停止应用并不删除应用, 将其进程结束,状态置0 *

func (*AppStack) UpdateApp

func (as *AppStack) UpdateApp(app typex.Application) error

* * 更新应用信息 *

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL