if (type == WS_TEXT) {
if (false == aer_result_analysis(asr_recv_buf)) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ASR result analysis failed");
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ASR result analysis failed %s",asr_recv_buf);
break;
}
} else if (type == WS_PONG) {
if (send_websocket_message(asr_client,( uint8_t *)buf,len,WS_BINARY)==0)
{
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"send_websocket_message succ 0\n");
- msleep(10);
+ msleep(100);
}
else
{
AI_LOCK();
// 首先关闭所有WebSocket连接
- if (chat_client) {
- lwip_close_websocket_client(chat_client);
- chat_client = NULL;
- }
- if (asr_client) {
- lwip_close_websocket_client(asr_client);
- asr_client = NULL;
- }
- if (tts_client) {
- lwip_close_websocket_client(tts_client);
- tts_client = NULL;
- }
+ // if (chat_client) {
+ // lwip_close_websocket_client(chat_client);
+ // chat_client = NULL;
+ // }
+ // if (asr_client) {
+ // lwip_close_websocket_client(asr_client);
+ // asr_client = NULL;
+ // }
+ // if (tts_client) {
+ // lwip_close_websocket_client(tts_client);
+ // tts_client = NULL;
+ // }
// 清理WebSocket消息队列
- ws_queues_deinit_all();
+ // ws_queues_deinit_all();
// 清理互斥锁
if (g_ai_mutex) {
AI_UNLOCK();
// 最后清理TCP管理器
- tcp_simple_manager_deinit();
+ // tcp_simple_manager_deinit();
WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "AI resources cleaned up");
}
static bool process_send_queue(tcp_connection_info_t* conn)
{
if (!conn || conn->send_queue_count == 0) {
+ printf("conn->send_queue_count == 0\r\n");
return true;
}
uint8_t index = (conn->send_queue_head + i) % TCP_SEND_QUEUE_SIZE;
tcp_send_queue_item_t* item = &conn->send_queue[index];
- if (!item->in_use) continue;
+ if (!item->in_use)
+ {
+ printf("item->in_use in_use\r\n");
+ continue;
+ }
/* 尝试发送数据 */
+ printf("process_send_queue start\r\n");
+
ssize_t sent = send(conn->sockfd, item->data, item->length, MSG_NOSIGNAL);
+ printf("process_send_queue %d %d\r\n",sent, item->length);
if (sent == item->length) {
/* 发送成功 */
/* 发送缓冲区满,稍后重试 */
all_sent = false;
break;
+ } else if (errno == ENOTCONN || errno == ECONNRESET || errno == EPIPE) {
+ /* 连接已断开,清空整个发送队列 */
+ printf("连接已断开,清空发送队列\n");
+ conn->send_queue_count = 0;
+ conn->send_queue_head = 0;
+ memset(conn->send_queue, 0, sizeof(conn->send_queue));
+ return false; // 表示需要重新建立连接
} else {
/* 发送错误,标记为失败 */
printf("发送错误: %d, 连接可能已断开\n", errno);
/* 处理发送队列 */
process_send_queue(conn);
}
+ else
+ {
+ if( conn->send_queue_count > 0)
+ {
+ printf("process_send_queue tcp_manager_io_thread %d %d\n",conn->send_queue_count,conn->sockfd);
+ }
+
+ }
}
/* 处理连接状态变化 */