|
@@ -1,131 +1,48 @@
|
|
|
-local TASK_NAME = "MQTT_CLINET_MAIN"
|
|
|
|
|
-
|
|
|
|
|
--- 非目标消息回调函数
|
|
|
|
|
-local function mqtt_client_main_cbfunc(msg)
|
|
|
|
|
- log.info("mqtt_client_main_cbfunc", msg[1], msg[2], msg[3], msg[4])
|
|
|
|
|
-end
|
|
|
|
|
-
|
|
|
|
|
--- mqtt main task 的任务处理函数
|
|
|
|
|
-local function mqtt_client_main_task_func()
|
|
|
|
|
- -- 连接、断开连接、订阅、取消订阅、异常等各种事件的处理调度逻辑
|
|
|
|
|
|
|
+--[[
|
|
|
|
|
+@module tgted_msg_receiver
|
|
|
|
|
+@summary “使用sys.waitMsg接口实现task内用户定向消息接收”功能演示模块
|
|
|
|
|
+@version 1.0
|
|
|
|
|
+@date 2025.08.12
|
|
|
|
|
+@author 朱天华
|
|
|
|
|
+@usage
|
|
|
|
|
+本文件为tgted_msg_receiver应用功能模块;
|
|
|
|
|
+用来演示“使用sys.waitMsg接口实现task内用户定向消息接收”的功能,核心业务逻辑为:
|
|
|
|
|
+1、创建并且启动一个高级task,task名称为"nromal_wait_msg_task",在task的任务处理函数内及时接收发送给自己的定向消息;
|
|
|
|
|
+2、创建并且启动另一个高级task,task名称为"delay_wait_msg_task",在task的任务处理函数内延时接收发送给自己的定向消息;
|
|
|
|
|
+
|
|
|
|
|
+本文件没有对外接口,直接在main.lua中require "tgted_msg_receiver"就可以加载运行;
|
|
|
|
|
+]]
|
|
|
|
|
+
|
|
|
|
|
+local function normal_wait_msg_task_func()
|
|
|
|
|
+ local msg
|
|
|
while true do
|
|
while true do
|
|
|
- -- 等待"MQTT_EVENT"消息
|
|
|
|
|
- msg = sysplus.waitMsg(TASK_NAME, "MQTT_EVENT")
|
|
|
|
|
- log.info("mqtt_client_main_task_func waitMsg", msg[2], msg[3], msg[4])
|
|
|
|
|
-
|
|
|
|
|
- -- connect连接结果
|
|
|
|
|
- -- msg[3]表示连接结果,true为连接成功,false为连接失败
|
|
|
|
|
- if msg[2] == "CONNECT" then
|
|
|
|
|
- -- mqtt连接成功
|
|
|
|
|
- if msg[3] then
|
|
|
|
|
- log.info("mqtt_client_main_task_func", "connect success")
|
|
|
|
|
- -- mqtt连接失败
|
|
|
|
|
- else
|
|
|
|
|
- log.info("mqtt_client_main_task_func", "connect error")
|
|
|
|
|
- end
|
|
|
|
|
-
|
|
|
|
|
- -- subscribe订阅结果
|
|
|
|
|
- -- msg[3]表示订阅结果,true为订阅成功,false为订阅失败
|
|
|
|
|
- elseif msg[2] == "SUBSCRIBE" then
|
|
|
|
|
- -- 订阅成功
|
|
|
|
|
- if msg[3] then
|
|
|
|
|
- log.info("mqtt_client_main_task_func", "subscribe success", "qos: "..(msg[4] or "nil"))
|
|
|
|
|
- -- 订阅失败
|
|
|
|
|
- else
|
|
|
|
|
- log.error("mqtt_client_main_task_func", "subscribe error", "code", msg[4])
|
|
|
|
|
- end
|
|
|
|
|
-
|
|
|
|
|
- -- 被动关闭了mqtt连接
|
|
|
|
|
- -- 被网络或者服务器断开了连接
|
|
|
|
|
- elseif msg[2] == "DISCONNECTED" then
|
|
|
|
|
- log.info("mqtt_client_main_task_func", "disconnected")
|
|
|
|
|
|
|
+ msg = sys.waitMsg("nromal_wait_msg_task", "SEND_DATA_REQ")
|
|
|
|
|
+ if msg then
|
|
|
|
|
+ log.info("normal_wait_msg_task_func", msg[1], msg[2], msg[3], msg[4])
|
|
|
end
|
|
end
|
|
|
end
|
|
end
|
|
|
end
|
|
end
|
|
|
|
|
|
|
|
-local function send_non_targeted_msg_task_func()
|
|
|
|
|
- local count = 0
|
|
|
|
|
-
|
|
|
|
|
|
|
+local function delay_wait_msg_task_func()
|
|
|
|
|
+ local msg
|
|
|
while true do
|
|
while true do
|
|
|
- count = count+1
|
|
|
|
|
-
|
|
|
|
|
- -- 向TASK_NAME这个任务发送一条消息
|
|
|
|
|
- -- 消息名称为"UNKNOWN_EVENT"
|
|
|
|
|
- -- 消息携带一个number类型的参数count
|
|
|
|
|
- sys.sendMsg(TASK_NAME, "UNKNOWN_EVENT", count)
|
|
|
|
|
-
|
|
|
|
|
- -- 延时等待1秒
|
|
|
|
|
- sys.wait(1000)
|
|
|
|
|
- end
|
|
|
|
|
-end
|
|
|
|
|
-
|
|
|
|
|
-local function send_non_targeted_msg_task_func()
|
|
|
|
|
- local count = 0
|
|
|
|
|
-
|
|
|
|
|
- while true do
|
|
|
|
|
- count = count+1
|
|
|
|
|
-
|
|
|
|
|
- -- 向TASK_NAME这个任务发送一条消息
|
|
|
|
|
- -- 消息名称为"UNKNOWN_EVENT"
|
|
|
|
|
- -- 消息携带一个number类型的参数count
|
|
|
|
|
- sysplus.sendMsg(TASK_NAME, "UNKNOWN_EVENT", count)
|
|
|
|
|
-
|
|
|
|
|
- -- 延时等待1秒
|
|
|
|
|
- sys.wait(1000)
|
|
|
|
|
- end
|
|
|
|
|
-end
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-local function send_targeted_msg_task_func()
|
|
|
|
|
- while true do
|
|
|
|
|
- -- 向TASK_NAME这个任务发送一条消息
|
|
|
|
|
- -- 消息名称为"MQTT_EVENT"
|
|
|
|
|
- -- 消息携带两个参数
|
|
|
|
|
- -- 第一个参数为"CONNECT"
|
|
|
|
|
- -- 第二个参数为true
|
|
|
|
|
- -- 这条消息的意思是MQTT连接成功
|
|
|
|
|
- sysplus.sendMsg(TASK_NAME, "MQTT_EVENT", "CONNECT", true)
|
|
|
|
|
-
|
|
|
|
|
- -- 延时等待1秒
|
|
|
|
|
- sys.wait(1000)
|
|
|
|
|
-
|
|
|
|
|
- -- 向TASK_NAME这个任务发送一条消息
|
|
|
|
|
- -- 消息名称为"MQTT_EVENT"
|
|
|
|
|
- -- 消息携带三个参数
|
|
|
|
|
- -- 第一个参数为"SUBSCRIBE"
|
|
|
|
|
- -- 第二个参数为true
|
|
|
|
|
- -- 第三个参数为0
|
|
|
|
|
- -- 这条消息的意思是MQTT订阅成功,qos为0
|
|
|
|
|
- sysplus.sendMsg(TASK_NAME, "MQTT_EVENT", "SUBSCRIBE", true, 0)
|
|
|
|
|
-
|
|
|
|
|
- -- 延时等待1秒
|
|
|
|
|
- sys.wait(1000)
|
|
|
|
|
-
|
|
|
|
|
- -- 向TASK_NAME这个任务发送一条消息
|
|
|
|
|
- -- 消息名称为"MQTT_EVENT"
|
|
|
|
|
- -- 消息携带一个参数"DISCONNECTED"
|
|
|
|
|
- -- 这条消息的意思是MQTT连接被动断开
|
|
|
|
|
- sysplus.sendMsg(TASK_NAME, "MQTT_EVENT", "DISCONNECTED")
|
|
|
|
|
-
|
|
|
|
|
- -- 延时等待1秒
|
|
|
|
|
- sys.wait(1000)
|
|
|
|
|
|
|
+ -- 阻塞等待3秒钟
|
|
|
|
|
+ -- 在这段时间内,本task无法及时处理定向消息发送模块发布的"SEND_DATA_REQ"消息
|
|
|
|
|
+ -- 但是不会造成消息丢失,消息会存储到本task绑定的定向消息队列中
|
|
|
|
|
+ -- 虽然不会造成消息丢失,但是业务逻辑中这样写明显也存在问题,因为消息处理的及时性很差
|
|
|
|
|
+ sys.wait(3000)
|
|
|
|
|
+
|
|
|
|
|
+ msg = sys.waitMsg("delay_wait_msg_task", "SEND_DATA_REQ")
|
|
|
|
|
+ if msg then
|
|
|
|
|
+ log.info("delay_wait_msg_task_func", msg[1], msg[2], msg[3], msg[4])
|
|
|
|
|
+ end
|
|
|
end
|
|
end
|
|
|
end
|
|
end
|
|
|
|
|
|
|
|
--- 创建并且启动一个高级task
|
|
|
|
|
--- task的任务处理函数为mqtt_client_main_task_func
|
|
|
|
|
--- task的名称为TASK_NAME变量的值"MQTT_CLINET_MAIN"
|
|
|
|
|
--- task的非目标消息回调函数为mqtt_client_main_cbfunc
|
|
|
|
|
--- 运行这个task的任务处理函数mqtt_client_main_task_func
|
|
|
|
|
-sysplus.taskInitEx(mqtt_client_main_task_func, TASK_NAME, mqtt_client_main_cbfunc)
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
--- 创建并且启动一个基础task
|
|
|
|
|
--- 运行这个task的任务处理函数send_targeted_msg_task_func
|
|
|
|
|
-sys.taskInit(send_non_targeted_msg_task_func)
|
|
|
|
|
|
|
+-- 创建并且启动一个高级task,task名称为"nromal_wait_msg_task"
|
|
|
|
|
+-- 运行这个task的任务处理函数normal_wait_msg_task_func
|
|
|
|
|
+sys.taskInitEx(normal_wait_msg_task_func, "nromal_wait_msg_task")
|
|
|
|
|
|
|
|
--- 创建并且启动一个高级task
|
|
|
|
|
--- task的任务处理函数为send_targeted_msg_task_func
|
|
|
|
|
--- task的名称为SEND_TASK_NAME
|
|
|
|
|
--- 运行这个task的任务处理函数send_targeted_msg_task_func
|
|
|
|
|
-sysplus.taskInitEx(send_targeted_msg_task_func, "SEND_MSG_TASK")
|
|
|
|
|
|
|
+-- 创建并且启动一个高级task,task名称为"delay_wait_msg_task"
|
|
|
|
|
+-- 运行这个task的任务处理函数delay_wait_msg_task_func
|
|
|
|
|
+sys.taskInitEx(delay_wait_msg_task_func, "delay_wait_msg_task")
|