chore: 注释ws

This commit is contained in:
Junhui Chen 2025-08-07 00:47:17 +08:00
parent 05263afc89
commit b35bb3cbeb

View File

@ -4,8 +4,7 @@ import AskHello from "@/components/ask/hello";
import SendMessage from "@/components/ask/send"; import SendMessage from "@/components/ask/send";
import { ThemedText } from "@/components/ThemedText"; import { ThemedText } from "@/components/ThemedText";
import { fetchApi } from "@/lib/server-api-util"; import { fetchApi } from "@/lib/server-api-util";
import { getWebSocketErrorMessage, getWebSocketManager, WsMessage } from "@/lib/websocket-util"; import { Message } from "@/types/ask";
import { Assistant, Message } from "@/types/ask";
import { useFocusEffect, useLocalSearchParams, useRouter } from "expo-router"; import { useFocusEffect, useLocalSearchParams, useRouter } from "expo-router";
import { useCallback, useEffect, useRef, useState } from 'react'; import { useCallback, useEffect, useRef, useState } from 'react';
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
@ -98,163 +97,163 @@ export default function AskScreen() {
}; };
}, [isHello]); }, [isHello]);
useFocusEffect( // useFocusEffect(
useCallback(() => { // useCallback(() => {
// 确保在组件挂载时才连接 // // 确保在组件挂载时才连接
const webSocketManager = getWebSocketManager(); // const webSocketManager = getWebSocketManager();
webSocketManager.connect(); // webSocketManager.connect();
let isMounted = true; // let isMounted = true;
const handleChatStream = (message: WsMessage) => { // const handleChatStream = (message: WsMessage) => {
// 确保组件仍然挂载 // // 确保组件仍然挂载
if (!isMounted) return; // if (!isMounted) return;
if (message.type === 'ChatStream') { // if (message.type === 'ChatStream') {
setUserMessages(prevMessages => { // setUserMessages(prevMessages => {
// 使用 try-catch 包装以防止错误导致应用崩溃 // // 使用 try-catch 包装以防止错误导致应用崩溃
try { // try {
const lastMessage = prevMessages[prevMessages.length - 1]; // const lastMessage = prevMessages[prevMessages.length - 1];
// 检查是否是有效的助手消息 // // 检查是否是有效的助手消息
if (!lastMessage || lastMessage.role !== Assistant) { // if (!lastMessage || lastMessage.role !== Assistant) {
return prevMessages; // return prevMessages;
} // }
// 创建新的消息数组 // // 创建新的消息数组
const newMessages = [...prevMessages]; // const newMessages = [...prevMessages];
if (typeof lastMessage.content === 'string') { // if (typeof lastMessage.content === 'string') {
if (lastMessage.content === 'keepSearchIng') { // if (lastMessage.content === 'keepSearchIng') {
// 第一次收到流式消息,替换占位符 // // 第一次收到流式消息,替换占位符
newMessages[newMessages.length - 1] = { // newMessages[newMessages.length - 1] = {
...lastMessage, // ...lastMessage,
content: message.chunk // content: message.chunk
}; // };
} else { // } else {
// 持续追加流式消息 // // 持续追加流式消息
newMessages[newMessages.length - 1] = { // newMessages[newMessages.length - 1] = {
...lastMessage, // ...lastMessage,
content: lastMessage.content + message.chunk // content: lastMessage.content + message.chunk
}; // };
} // }
} else if (Array.isArray(lastMessage.content)) { // } else if (Array.isArray(lastMessage.content)) {
// 如果 content 是数组,则更新第一个 text 部分 // // 如果 content 是数组,则更新第一个 text 部分
const textPartIndex = lastMessage.content.findIndex(p => p.type === 'text'); // const textPartIndex = lastMessage.content.findIndex(p => p.type === 'text');
if (textPartIndex !== -1) { // if (textPartIndex !== -1) {
const updatedContent = [...lastMessage.content]; // const updatedContent = [...lastMessage.content];
updatedContent[textPartIndex] = { // updatedContent[textPartIndex] = {
...updatedContent[textPartIndex], // ...updatedContent[textPartIndex],
text: (updatedContent[textPartIndex].text || '') + message.chunk // text: (updatedContent[textPartIndex].text || '') + message.chunk
}; // };
newMessages[newMessages.length - 1] = { // newMessages[newMessages.length - 1] = {
...lastMessage, // ...lastMessage,
content: updatedContent // content: updatedContent
}; // };
} // }
} // }
return newMessages; // return newMessages;
} catch (error) { // } catch (error) {
console.error('处理 ChatStream 消息时出错:', error); // console.error('处理 ChatStream 消息时出错:', error);
// 发生错误时返回原始消息数组 // // 发生错误时返回原始消息数组
return prevMessages; // return prevMessages;
} // }
}); // });
} // }
}; // };
const handleChatStreamEnd = (message: WsMessage) => { // const handleChatStreamEnd = (message: WsMessage) => {
// 确保组件仍然挂载 // // 确保组件仍然挂载
if (!isMounted) return; // if (!isMounted) return;
if (message.type === 'ChatStreamEnd') { // if (message.type === 'ChatStreamEnd') {
setUserMessages(prevMessages => { // setUserMessages(prevMessages => {
// 使用 try-catch 包装以防止错误导致应用崩溃 // // 使用 try-catch 包装以防止错误导致应用崩溃
try { // try {
const lastMessage = prevMessages[prevMessages.length - 1]; // const lastMessage = prevMessages[prevMessages.length - 1];
// 检查是否是有效的助手消息 // // 检查是否是有效的助手消息
if (!lastMessage || lastMessage.role !== Assistant) { // if (!lastMessage || lastMessage.role !== Assistant) {
return prevMessages; // return prevMessages;
} // }
// 使用最终消息替换流式消息,确保 message.message 存在 // // 使用最终消息替换流式消息,确保 message.message 存在
if (message.message) { // if (message.message) {
const newMessages = [...prevMessages]; // const newMessages = [...prevMessages];
newMessages[newMessages.length - 1] = message.message as Message; // newMessages[newMessages.length - 1] = message.message as Message;
return newMessages; // return newMessages;
} else { // } else {
// 如果最终消息为空,则移除 'keepSearchIng' 占位符 // // 如果最终消息为空,则移除 'keepSearchIng' 占位符
return prevMessages.filter(m => // return prevMessages.filter(m =>
!(typeof m.content === 'string' && m.content === 'keepSearchIng') // !(typeof m.content === 'string' && m.content === 'keepSearchIng')
); // );
} // }
} catch (error) { // } catch (error) {
console.error('处理 ChatStreamEnd 消息时出错:', error); // console.error('处理 ChatStreamEnd 消息时出错:', error);
// 发生错误时返回原始消息数组 // // 发生错误时返回原始消息数组
return prevMessages; // return prevMessages;
} // }
}); // });
} // }
}; // };
const handleError = (message: WsMessage) => { // const handleError = (message: WsMessage) => {
// 确保组件仍然挂载 // // 确保组件仍然挂载
if (!isMounted) return; // if (!isMounted) return;
if (message.type === 'Error') { // if (message.type === 'Error') {
console.log(`WebSocket Error: ${message.code} - ${message.message}`); // console.log(`WebSocket Error: ${message.code} - ${message.message}`);
setUserMessages(prevMessages => { // setUserMessages(prevMessages => {
// 使用 try-catch 包装以防止错误导致应用崩溃 // // 使用 try-catch 包装以防止错误导致应用崩溃
try { // try {
const lastMessage = prevMessages[prevMessages.length - 1]; // const lastMessage = prevMessages[prevMessages.length - 1];
// 检查是否是有效的助手消息且包含占位符 // // 检查是否是有效的助手消息且包含占位符
if (!lastMessage || // if (!lastMessage ||
lastMessage.role !== Assistant || // lastMessage.role !== Assistant ||
typeof lastMessage.content !== 'string' || // typeof lastMessage.content !== 'string' ||
lastMessage.content !== 'keepSearchIng') { // lastMessage.content !== 'keepSearchIng') {
return prevMessages; // return prevMessages;
} // }
// 替换占位符为错误消息 // // 替换占位符为错误消息
const newMessages = [...prevMessages]; // const newMessages = [...prevMessages];
newMessages[newMessages.length - 1] = { // newMessages[newMessages.length - 1] = {
...lastMessage, // ...lastMessage,
content: getWebSocketErrorMessage(message.code, t) // content: getWebSocketErrorMessage(message.code, t)
}; // };
return newMessages; // return newMessages;
} catch (error) { // } catch (error) {
console.error('处理 Error 消息时出错:', error); // console.error('处理 Error 消息时出错:', error);
// 发生错误时返回原始消息数组 // // 发生错误时返回原始消息数组
return prevMessages; // return prevMessages;
} // }
}); // });
} // }
}; // };
webSocketManager.subscribe('ChatStream', handleChatStream); // webSocketManager.subscribe('ChatStream', handleChatStream);
webSocketManager.subscribe('ChatStreamEnd', handleChatStreamEnd); // webSocketManager.subscribe('ChatStreamEnd', handleChatStreamEnd);
webSocketManager.subscribe('Error', handleError); // webSocketManager.subscribe('Error', handleError);
return () => { // return () => {
// 设置组件卸载标志 // // 设置组件卸载标志
isMounted = false; // isMounted = false;
// 清理订阅 // // 清理订阅
webSocketManager.unsubscribe('ChatStream', handleChatStream); // webSocketManager.unsubscribe('ChatStream', handleChatStream);
webSocketManager.unsubscribe('ChatStreamEnd', handleChatStreamEnd); // webSocketManager.unsubscribe('ChatStreamEnd', handleChatStreamEnd);
webSocketManager.unsubscribe('Error', handleError); // webSocketManager.unsubscribe('Error', handleError);
// 可以在这里选择断开连接,或者保持连接以加快下次进入页面的速度 // // 可以在这里选择断开连接,或者保持连接以加快下次进入页面的速度
webSocketManager.disconnect(); // webSocketManager.disconnect();
}; // };
}, [t]) // }, [t])
); // );
// 创建动画样式 // 创建动画样式
const welcomeStyle = useAnimatedStyle(() => { const welcomeStyle = useAnimatedStyle(() => {