创建WebSocket自动启动任务:每3秒检测一次网络并启动WS
authorcheng <chengyf@zhihuishixun.com>
Sun, 21 Sep 2025 03:58:08 +0000 (11:58 +0800)
committercheng <chengyf@zhihuishixun.com>
Sun, 21 Sep 2025 03:58:08 +0000 (11:58 +0800)
code/sdk/zhihui/leiniao/imsl_ln/ln_api.c

index fd87d81..9e90539 100644 (file)
@@ -1394,6 +1394,32 @@ void do_ln_http_server_recv_data(int cmd, char *data, uint32_t len)
         if (recv_data.data) free(recv_data.data);
     }
 }
+/* WebSocket自动启动任务(网络就绪后启动WebSocket)*/
+static app_task_definition_t ln_ws_autostart_taskcfg = {0};
+static void ln_ws_autostart_task(void const *arg)
+{
+    printf("[LN][WS] autostart task running\n");
+    while (1)
+    {
+        /* 每3秒检查一次网络 */
+        if (uapi_dev_runtime_get_cat1_networkstat())
+        {
+            printf("[LN][WS] network online, try start websocket\n");
+            int ret = ln_ws_start(ln_ws_process_message);
+            if (ret == 0)
+            {
+                printf("[LN][WS] websocket started\n");
+                break; /* 启动成功后退出任务 */
+            }
+            else
+            {
+                printf("[LN][WS] start websocket failed: %d, retry later\n", ret);
+            }
+        }
+        usleep(3000 * 1000); // 休眠3秒
+    }
+    printf("[LN][WS] autostart task exit\n");
+}
 // 雷鸟http服务初始化
 errcode_t uapi_ln_http_server_init(void)
 {
@@ -1433,7 +1459,15 @@ errcode_t uapi_ln_http_server_init(void)
         printf("[LN_AUDIO] init failed in http server init\n");
         /* 不中断HTTP服务,按需可返回失败 */
     }
-    ln_ws_start(ln_ws_process_message);
+
+    /* 创建WebSocket自动启动任务:每3秒检测一次网络并启动WS */
+    ln_ws_autostart_taskcfg.create_queue_handle = NULL;
+    ln_ws_autostart_taskcfg.attr.name = "ln_ws_autostart_task";
+    ln_ws_autostart_taskcfg.attr.priority = osPriorityNormal;
+    ln_ws_autostart_taskcfg.attr.stack_size = 0x500;
+    ln_ws_autostart_taskcfg.func = ln_ws_autostart_task;
+    ln_ws_autostart_taskcfg.use_mem = USE_EXTEND_MEM;
+    (void)uapi_create_osThread_custom(&ln_ws_autostart_taskcfg);
 
     return ERRCODE_SUCC;
 }