uint32_t message_counter; // 消息计数器
bool is_active; // 是否活跃
bool is_reply; // 是否回复
+ bool finished; // 是否完成
} audio_chat_context_t;
// 全局音频聊天上下文
g_audio_chat_ctx.message_counter = 0;
g_audio_chat_ctx.is_active = true;
g_audio_chat_ctx.is_reply = false;
+ g_audio_chat_ctx.finished = false;
// 重置对话ID匹配标志
reset_chat_id_match();
LN_WS_DEBUG("New chat started: %s\n", g_audio_chat_ctx.chat_id);
g_audio_chat_ctx.message_counter = 0;
g_audio_chat_ctx.is_active = true;
g_audio_chat_ctx.is_reply = false;
+ g_audio_chat_ctx.finished = false;
// 清空音频时长数组,避免不同对话间的数据混淆
clear_audio_duration_buffer();
if (ret == 0) {
LN_WS_DEBUG("VoiceChatInterrupt sent successfully\n");
- if (need_reconnect || g_audio_chat_ctx.is_reply==false) {
+ if (need_reconnect || g_audio_chat_ctx.finished ==false) {
// 如果检测到频繁数据接收,直接重连
LN_WS_INFO("Triggering reconnection due to frequent binary data reception\n");
if (ln_ws_reconnect() != 0) {
if (data_msg->command == WS_CMD_VOICE_CHAT_RESPONSE) {
cJSON *data_obj = cJSON_GetObjectItem(root, "data");
if (data_obj && cJSON_IsObject(data_obj)) {
- // 解析finished字段
+ // 解析finished字段(先解析到data_msg,但不更新全局上下文)
cJSON *finished = cJSON_GetObjectItem(data_obj, "finished");
if (finished && cJSON_IsBool(finished)) {
data_msg->finished = cJSON_IsTrue(finished);
if (ln_ws_check_chat_id_match(data_msg->chat_id, root) != 0) {
return -1; // 不匹配,已清理JSON
}
- // 对è¯\9dIDå\8c¹é\85\8dæ\88\90å\8a\9fï¼\8cæ \87记为已å\9b\9eå¤\8dï¼\88ä»\85å½\93对è¯\9dæ´»è·\83æ\97¶ï¼\89
- {
+ // 对è¯\9dIDå\8c¹é\85\8dæ\88\90å\8a\9fï¼\8cæ\9b´æ\96°å\85¨å±\80ä¸\8aä¸\8bæ\96\87
+ {
g_audio_chat_ctx.is_reply = true;
- LN_WS_DEBUG("VoiceChatResponse matched current chat, set is_reply=true\n");
+ // 只有在对话ID匹配的情况下才更新finished状态
+ if (finished && cJSON_IsBool(finished)) {
+ g_audio_chat_ctx.finished = data_msg->finished;
+ }
+ LN_WS_DEBUG("VoiceChatResponse matched current chat, set is_reply=true, finished=%s\n",
+ finished && cJSON_IsBool(finished) ? (data_msg->finished ? "true" : "false") : "unknown");
}
}
if (data_msg->command == WS_CMD_CHOOSE_STORY_RESPONSE) {
cJSON *data_obj = cJSON_GetObjectItem(root, "data");
if (data_obj && cJSON_IsObject(data_obj)) {
- // 解析finished字段
+ // 解析finished字段(先解析到data_msg,但不更新全局上下文)
cJSON *finished = cJSON_GetObjectItem(data_obj, "finished");
if (finished && cJSON_IsBool(finished)) {
data_msg->finished = cJSON_IsTrue(finished);
if (ln_ws_check_chat_id_match(data_msg->chat_id, root) != 0) {
return -1; // 不匹配,已清理JSON
}
- // 对è¯\9dIDå\8c¹é\85\8dæ\88\90å\8a\9fï¼\8cæ \87记为已å\9b\9eå¤\8dï¼\88ä»\85å½\93对è¯\9dæ´»è·\83æ\97¶ï¼\89
- {
+ // 对è¯\9dIDå\8c¹é\85\8dæ\88\90å\8a\9fï¼\8cæ\9b´æ\96°å\85¨å±\80ä¸\8aä¸\8bæ\96\87
+ {
g_audio_chat_ctx.is_reply = true;
- LN_WS_DEBUG("ChooseStoryResponse matched current chat, set is_reply=true\n");
+ // 只有在对话ID匹配的情况下才更新finished状态
+ if (finished && cJSON_IsBool(finished)) {
+ g_audio_chat_ctx.finished = data_msg->finished;
+ }
+ LN_WS_DEBUG("ChooseStoryResponse matched current chat, set is_reply=true, finished=%s\n",
+ finished && cJSON_IsBool(finished) ? (data_msg->finished ? "true" : "false") : "unknown");
}
}
if (data_msg->command == WS_CMD_RANDOM_STORY_RESPONSE) {
cJSON *data_obj = cJSON_GetObjectItem(root, "data");
if (data_obj && cJSON_IsObject(data_obj)) {
- // 解析finished字段
+ // 解析finished字段(先解析到data_msg,但不更新全局上下文)
cJSON *finished = cJSON_GetObjectItem(data_obj, "finished");
if (finished && cJSON_IsBool(finished)) {
data_msg->finished = cJSON_IsTrue(finished);
if (ln_ws_check_chat_id_match(data_msg->chat_id, root) != 0) {
return -1; // 不匹配,已清理JSON
}
- // 对è¯\9dIDå\8c¹é\85\8dæ\88\90å\8a\9fï¼\8cæ \87记为已å\9b\9eå¤\8dï¼\88ä»\85å½\93对è¯\9dæ´»è·\83æ\97¶ï¼\89
+ // 对è¯\9dIDå\8c¹é\85\8dæ\88\90å\8a\9fï¼\8cæ\9b´æ\96°å\85¨å±\80ä¸\8aä¸\8bæ\96\87
{
g_audio_chat_ctx.is_reply = true;
- LN_WS_DEBUG("RandomStoryResponse matched current chat, set is_reply=true\n");
+ // 只有在对话ID匹配的情况下才更新finished状态
+ if (finished && cJSON_IsBool(finished)) {
+ g_audio_chat_ctx.finished = data_msg->finished;
+ }
+ LN_WS_DEBUG("RandomStoryResponse matched current chat, set is_reply=true, finished=%s\n",
+ finished && cJSON_IsBool(finished) ? (data_msg->finished ? "true" : "false") : "unknown");
}
}
g_audio_chat_ctx.message_counter = 0;
g_audio_chat_ctx.is_active = true;
g_audio_chat_ctx.is_reply = false;
+ g_audio_chat_ctx.finished = false;
// 重置对话ID匹配标志
reset_chat_id_match();
LN_WS_DEBUG("New chat started: %s\n", g_audio_chat_ctx.chat_id);