From 5a4926985753568752f1f488eaa0aaeadbae2ce9 Mon Sep 17 00:00:00 2001 From: hcj <1224667075@qq.com> Date: Fri, 26 Sep 2025 19:40:13 +0800 Subject: [PATCH] =?utf8?q?=E8=A1=A5=E4=BA=A4ws=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../zhihui/websocket/os_ws/haisi_websocket.c | 23 +++++++++++++++++-- .../zhihui/websocket/os_ws/haisi_websocket.h | 5 ++++ 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/code/sdk/zhihui/websocket/os_ws/haisi_websocket.c b/code/sdk/zhihui/websocket/os_ws/haisi_websocket.c index 21fe09128..decd7adb8 100644 --- a/code/sdk/zhihui/websocket/os_ws/haisi_websocket.c +++ b/code/sdk/zhihui/websocket/os_ws/haisi_websocket.c @@ -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 回调函数 diff --git a/code/sdk/zhihui/websocket/os_ws/haisi_websocket.h b/code/sdk/zhihui/websocket/os_ws/haisi_websocket.h index 513955ae4..d2ac635a6 100644 --- a/code/sdk/zhihui/websocket/os_ws/haisi_websocket.h +++ b/code/sdk/zhihui/websocket/os_ws/haisi_websocket.h @@ -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); -- 2.17.1