IOTBox中包含三个概念
Kernel 内核,负责调度和执行整个系统,包含定时器定时执行特定的任务。
Module 系统组成模块,包括通讯类模块及存储类模块等,模块负责执行任务。
Task 任务,执行某种特定任务的功能。
Module必须继承自common.AModule,并实现IModule的Config、Send两个函数
Config 为通过配置文件初始化模块
Send 表示Task发送数据包给模块,并期待模块的返回
Task必须继承自ATask,由于go语言没有构造函数,因此必须定义CreateXXX函数(该函数为动态加载做准备)
该函数必须设置该对象的SetOtherConfig函数。
func (d *Demo) XXXConfig(kernel common.IKernel, config map[string]interface{}) error {
Task为状态机模式,需要配置当前执行的Work函数
func XXXWork(module common.IModule) (common.WorkState, error)
Config 为通过配置文件初始化Task
Work 为执行任务,表示Task已经获得Module的调度权
本例子用于模仿定时执行的多帧任务,由模块core启动该任务,任务执行后,将结果发送给handler配置的 处理事件(Sqlite及上报)。
注意:由于每次调用任务对象为固定对象,因此需考虑避免并发问题(如被某个模块调用时,不可被其他模块所调用)
/module/core/core.go 定时启动的任务组
/module/sqlite/sqlite.go Sqlite执行任务
/task/demo/demo.go Demo多帧任务
/task/sql/sql.go 将结果转换为SQL语句,并发送给Sqlite执行