补交ws接口 2413/1 2413/head 2414/target/1
authorhcj <1224667075@qq.com>
Fri, 26 Sep 2025 11:40:13 +0000 (19:40 +0800)
committerhcj <1224667075@qq.com>
Fri, 26 Sep 2025 11:40:13 +0000 (19:40 +0800)
code/sdk/zhihui/websocket/os_ws/haisi_websocket.c
code/sdk/zhihui/websocket/os_ws/haisi_websocket.h

index 21fe091..decd7ad 100644 (file)
@@ -129,6 +129,7 @@ static void uapi_ws_on_message(int client, const char *data, size_t length, bool
     
     /* 数据完整性判断 */
     printf("WebSocketClientConstructor data %d\r\n",length);
+
     if (isFinished) {
         // 数据完整,创建消息结构体
         ws_msg_info_t *msg = ws_msg_create(length);
@@ -169,8 +170,13 @@ static void uapi_ws_on_message(int client, const char *data, size_t length, bool
             }
         }
      
-    } else {
+    } 
+    else {
         printf("[LN][WS] Incomplete or invalid message data\n");
+        // 数据不完整时调用回调函数
+        if (g_ws_callbacks.incomplete_callback != NULL) {
+            g_ws_callbacks.incomplete_callback(data, length, isBinary);
+        }
     }
 }
 
@@ -320,6 +326,7 @@ static void uapi_ws_main_thread(void *arg)
                 if(g_ws_close_status== WS_CLOSE_NOT_EXECUTED){
                     printf("[LN][WS] WebSocketClientClose WS_CLOSE_NOT_EXECUTED\n");
                     uapi_ws_close_with_status(g_ws_client_fd);
+                    g_ws_close_status = WS_CLOSE_NOT_EXECUTED;
                     g_ws_client_fd=-1;
                     printf("[LN][WS] WebSocketClientClose WS_CLOSE_NOT_EXECUTED end\n");
                 }
@@ -510,6 +517,7 @@ int uapi_ws_send_text(const char *text)
     }
     return WebSocketClientSendText(g_ws_client_fd, text, strlen(text));
 }
+uint32_t size_uapi_ws_send_BIN=0;
 
 int uapi_ws_send_BIN(uint8_t *data,int len)
 {
@@ -538,7 +546,8 @@ int uapi_ws_send_BIN(uint8_t *data,int len)
         WebSocketClientSendBinEnd(g_ws_client_fd,data+len/3+len/3,len/3);
         
     }
-    printf("[LN][WS] uapi_ws_send_BIN,size: %d\n", len);
+    size_uapi_ws_send_BIN+=len;
+    printf("[LN][WS] uapi_ws_send_BIN,size: %d %d\n", len,size_uapi_ws_send_BIN);
 
     return  0;
 }
@@ -680,6 +689,16 @@ void uapi_ws_register_binary_callback(ws_binary_message_callback_t callback)
     }
 }
 
+void uapi_ws_register_incomplete_callback(ws_incomplete_message_callback_t callback)
+{
+    g_ws_callbacks.incomplete_callback = callback;
+    if (callback != NULL) {
+        printf("[LN][WS] Incomplete message callback registered successfully\n");
+    } else {
+        printf("[LN][WS] Incomplete message callback unregistered\n");
+    }
+}
+
 /**
  * @brief 注册URL处理回调函数(公共接口)
  * @param callback 回调函数
index 513955a..d2ac635 100644 (file)
@@ -17,6 +17,9 @@ typedef void (*ws_message_callback_t)(const char *raw_data, uint32_t timestamp);
 /* 二进制消息处理回调函数类型 */
 typedef void (*ws_binary_message_callback_t)(const uint8_t *raw_data, uint32_t timestamp, uint16_t data_len);
 
+/* 数据不完整消息处理回调函数类型 */
+typedef void (*ws_incomplete_message_callback_t)(const char *raw_data, size_t length, bool isBinary);
+
 /* URL构建回调函数类型 */
 typedef void (*ws_url_callback_t)(char *url, size_t url_size, char *header_buf, size_t header_size);
 
@@ -37,6 +40,7 @@ typedef void (*ws_event_callback_t)(ws_event_type_t event_type);
 typedef struct {
     ws_message_callback_t message_callback;         /* 文本消息处理回调函数 */
     ws_binary_message_callback_t binary_callback;  /* 二进制消息处理回调函数 */
+    ws_incomplete_message_callback_t incomplete_callback; /* 数据不完整消息处理回调函数 */
     ws_url_callback_t url_callback;                /* URL构建回调函数 */
     ws_heartbeat_callback_t heartbeat_callback;     /* 心跳处理回调函数 */
     ws_event_callback_t event_callback;            /* 连接事件回调函数 */
@@ -62,6 +66,7 @@ void uapi_ws_print_status_info(void);
 /* 回调函数注册接口 */
 void uapi_ws_register_message_callback(ws_message_callback_t callback);
 void uapi_ws_register_binary_callback(ws_binary_message_callback_t callback);
+void uapi_ws_register_incomplete_callback(ws_incomplete_message_callback_t callback);
 void uapi_ws_register_url_callback(ws_url_callback_t callback);
 void uapi_ws_register_heartbeat_callback(ws_heartbeat_callback_t callback);
 void uapi_ws_register_event_callback(ws_event_callback_t callback);