chore: 注释ws

This commit is contained in:
Junhui Chen 2025-08-06 17:40:25 +08:00
parent ba494c1396
commit 0e86fe5659

View File

@ -1,10 +1,10 @@
import ReturnArrow from "@/assets/icons/svg/returnArrow.svg"; import ReturnArrow from "@/assets/icons/svg/returnArrow.svg";
import Chat from "@/components/ask/chat";
import AskHello from "@/components/ask/hello"; 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, webSocketManager, 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";
@ -97,92 +97,92 @@ export default function AskScreen() {
}; };
}, [isHello]); }, [isHello]);
useFocusEffect( // useFocusEffect(
useCallback(() => { // useCallback(() => {
webSocketManager.connect(); // webSocketManager.connect();
const handleChatStream = (message: WsMessage) => { // const handleChatStream = (message: WsMessage) => {
if (message.type === 'ChatStream') { // if (message.type === 'ChatStream') {
setUserMessages(prevMessages => { // setUserMessages(prevMessages => {
const newMessages = [...prevMessages]; // const newMessages = [...prevMessages];
const lastMessage = newMessages[newMessages.length - 1]; // const lastMessage = newMessages[newMessages.length - 1];
if (lastMessage && lastMessage.role === Assistant) { // if (lastMessage && lastMessage.role === Assistant) {
if (typeof lastMessage.content === 'string') { // if (typeof lastMessage.content === 'string') {
if (lastMessage.content === 'keepSearchIng') { // if (lastMessage.content === 'keepSearchIng') {
// 第一次收到流式消息,替换占位符 // // 第一次收到流式消息,替换占位符
lastMessage.content = message.chunk; // lastMessage.content = message.chunk;
} else { // } else {
// 持续追加流式消息 // // 持续追加流式消息
lastMessage.content += message.chunk; // lastMessage.content += message.chunk;
} // }
} else { // } else {
// 如果 content 是数组,则更新第一个 text 部分 // // 如果 content 是数组,则更新第一个 text 部分
const textPart = lastMessage.content.find(p => p.type === 'text'); // const textPart = lastMessage.content.find(p => p.type === 'text');
if (textPart) { // if (textPart) {
textPart.text = (textPart.text || '') + message.chunk; // textPart.text = (textPart.text || '') + message.chunk;
} // }
} // }
} // }
return newMessages; // return newMessages;
}); // });
} // }
}; // };
const handleChatStreamEnd = (message: WsMessage) => { // const handleChatStreamEnd = (message: WsMessage) => {
if (message.type === 'ChatStreamEnd') { // if (message.type === 'ChatStreamEnd') {
setUserMessages(prevMessages => { // setUserMessages(prevMessages => {
const newMessages = [...prevMessages]; // const newMessages = [...prevMessages];
const lastMessage = newMessages[newMessages.length - 1]; // const lastMessage = newMessages[newMessages.length - 1];
if (lastMessage && lastMessage.role === Assistant) { // if (lastMessage && lastMessage.role === Assistant) {
// 使用最终消息替换流式消息,确保 message.message 存在 // // 使用最终消息替换流式消息,确保 message.message 存在
if (message.message) { // if (message.message) {
newMessages[newMessages.length - 1] = message.message as Message; // newMessages[newMessages.length - 1] = message.message as Message;
} else { // } else {
// 如果最终消息为空,则移除 'keepSearchIng' 占位符 // // 如果最终消息为空,则移除 'keepSearchIng' 占位符
return prevMessages.filter(m => !(typeof m.content === 'string' && m.content === 'keepSearchIng')); // return prevMessages.filter(m => !(typeof m.content === 'string' && m.content === 'keepSearchIng'));
} // }
} // }
return newMessages; // return newMessages;
}); // });
} // }
}; // };
const handleError = (message: WsMessage) => { // const handleError = (message: WsMessage) => {
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(prev => { // setUserMessages(prev => {
// 创建新的数组和新的消息对象 // // 创建新的数组和新的消息对象
return prev.map((msg, index) => { // return prev.map((msg, index) => {
if (index === prev.length - 1 && // if (index === prev.length - 1 &&
typeof msg.content === 'string' && // typeof msg.content === 'string' &&
msg.content === 'keepSearchIng') { // msg.content === 'keepSearchIng') {
// 返回新的消息对象 // // 返回新的消息对象
return { // return {
...msg, // ...msg,
content: getWebSocketErrorMessage(message.code, t) // content: getWebSocketErrorMessage(message.code, t)
}; // };
} // }
return msg; // return msg;
}); // });
}); // });
} // }
}; // };
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 () => {
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();
}; // };
}, []) // }, [])
); // );
// 创建动画样式 // 创建动画样式
const welcomeStyle = useAnimatedStyle(() => { const welcomeStyle = useAnimatedStyle(() => {
@ -271,7 +271,7 @@ export default function AskScreen() {
</Animated.View> </Animated.View>
{/* 聊天页面 */} {/* 聊天页面 */}
{/* <Animated.View <Animated.View
style={[styles.absoluteView, chatStyle, { zIndex: 0 }]} style={[styles.absoluteView, chatStyle, { zIndex: 0 }]}
> >
<Chat <Chat
@ -285,7 +285,7 @@ export default function AskScreen() {
showsVerticalScrollIndicator={false} showsVerticalScrollIndicator={false}
// onContentSizeChange={() => scrollToEnd()} // onContentSizeChange={() => scrollToEnd()}
/> />
</Animated.View> */} </Animated.View>
</View> </View>
{/* 输入框区域 */} {/* 输入框区域 */}