chore: 注释websocket

This commit is contained in:
Junhui Chen 2025-08-07 01:16:58 +08:00
parent 3047215ada
commit b3b31baab2

View File

@ -3,10 +3,9 @@ import Chat from "@/components/ask/chat";
import AskHello from "@/components/ask/hello";
import SendMessage from "@/components/ask/send";
import { ThemedText } from "@/components/ThemedText";
import { fetchApi } from "@/lib/server-api-util";
import { getWebSocketErrorMessage, getWebSocketManager, WsMessage } from "@/lib/websocket-util";
import { Assistant, Message } from "@/types/ask";
import { useWebSocketStreamHandler } from "@/hooks/useWebSocketStreamHandler";
import { fetchApi } from "@/lib/server-api-util";
import { Message } from "@/types/ask";
import { useFocusEffect, useLocalSearchParams, useRouter } from "expo-router";
import { useCallback, useEffect, useRef, useState } from 'react';
import { useTranslation } from "react-i18next";
@ -33,7 +32,7 @@ export default function AskScreen() {
const scrollTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);
const keyboardTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);
const abortControllerRef = useRef<AbortController | null>(null);
const [isHello, setIsHello] = useState(true);
const [conversationId, setConversationId] = useState<string | null>(null);
const [userMessages, setUserMessages] = useState<Message[]>([]);
@ -50,12 +49,12 @@ export default function AskScreen() {
// 创建一个安全的滚动函数
const scrollToEnd = useCallback((animated = true) => {
if (!isMountedRef.current || !chatListRef.current) return;
// 清理之前的定时器
if (scrollTimeoutRef.current) {
clearTimeout(scrollTimeoutRef.current);
}
scrollTimeoutRef.current = setTimeout(() => {
if (isMountedRef.current && chatListRef.current) {
try {
@ -70,7 +69,7 @@ export default function AskScreen() {
// 清理函数
const cleanup = useCallback(() => {
isMountedRef.current = false;
// 清理定时器
if (scrollTimeoutRef.current) {
clearTimeout(scrollTimeoutRef.current);
@ -80,7 +79,7 @@ export default function AskScreen() {
clearTimeout(keyboardTimeoutRef.current);
keyboardTimeoutRef.current = null;
}
// 取消API请求
if (abortControllerRef.current) {
abortControllerRef.current.abort();
@ -101,7 +100,7 @@ export default function AskScreen() {
if (keyboardTimeoutRef.current) {
clearTimeout(keyboardTimeoutRef.current);
}
keyboardTimeoutRef.current = setTimeout(() => {
if (isMountedRef.current && !isHello) {
scrollToEnd();
@ -116,7 +115,7 @@ export default function AskScreen() {
if (keyboardTimeoutRef.current) {
clearTimeout(keyboardTimeoutRef.current);
}
keyboardTimeoutRef.current = setTimeout(() => {
if (isMountedRef.current && !isHello) {
scrollToEnd(false);
@ -141,20 +140,20 @@ export default function AskScreen() {
enableBatching: false // AskScreen使用实时模式
});
useFocusEffect(
useCallback(() => {
isMountedRef.current = true;
// 订阅WebSocket消息
const unsubscribe = subscribeToWebSocket();
// useFocusEffect(
// useCallback(() => {
// isMountedRef.current = true;
return () => {
// 取消订阅和执行清理
unsubscribe();
cleanup();
};
}, [subscribeToWebSocket, cleanup])
);
// // 订阅WebSocket消息
// const unsubscribe = subscribeToWebSocket();
// return () => {
// // 取消订阅和执行清理
// unsubscribe();
// cleanup();
// };
// }, [subscribeToWebSocket, cleanup])
// );
// 创建动画样式
const welcomeStyle = useAnimatedStyle(() => {
@ -181,10 +180,10 @@ export default function AskScreen() {
if (sessionId && isMountedRef.current) {
setConversationId(sessionId);
setIsHello(false);
// 创建新的AbortController
abortControllerRef.current = new AbortController();
fetchApi<Message[]>(`/chats/${sessionId}/message-history`, {
signal: abortControllerRef.current.signal
}).then((res) => {
@ -222,70 +221,70 @@ export default function AskScreen() {
return (
<View style={[styles.container, { paddingTop: insets.top, paddingBottom: insets.bottom }]}>
{/* 导航栏 */}
<View style={[styles.navbar, isHello && styles.hiddenNavbar]}>
<TouchableOpacity
style={styles.backButton}
onPress={() => {
try {
if (TextInput.State?.currentlyFocusedInput) {
const input = TextInput.State.currentlyFocusedInput();
if (input) input.blur();
}
} catch (error) {
console.log('失去焦点失败:', error);
{/* 导航栏 */}
<View style={[styles.navbar, isHello && styles.hiddenNavbar]}>
<TouchableOpacity
style={styles.backButton}
onPress={() => {
try {
if (TextInput.State?.currentlyFocusedInput) {
const input = TextInput.State.currentlyFocusedInput();
if (input) input.blur();
}
Keyboard.dismiss();
router.push('/memo-list');
}}
>
<ReturnArrow />
</TouchableOpacity>
<ThemedText style={styles.title} onPress={() => { router.push('/owner') }}>MemoWake</ThemedText>
<View style={styles.placeholder} />
} catch (error) {
console.log('失去焦点失败:', error);
}
Keyboard.dismiss();
router.push('/memo-list');
}}
>
<ReturnArrow />
</TouchableOpacity>
<ThemedText style={styles.title} onPress={() => { router.push('/owner') }}>MemoWake</ThemedText>
<View style={styles.placeholder} />
</View>
<View style={styles.contentContainer}>
{/* 欢迎页面 */}
<Animated.View
style={[styles.absoluteView, welcomeStyle, { zIndex: 1 }]}
>
<AskHello setUserMessages={setUserMessages} setConversationId={setConversationId} setIsHello={setIsHello} />
</Animated.View>
{/* 聊天页面 */}
<Animated.View
style={[styles.absoluteView, chatStyle, { zIndex: 0 }]}
>
<Chat
ref={chatListRef}
userMessages={userMessages}
sessionId={sessionId}
setSelectedImages={setSelectedImages}
selectedImages={selectedImages}
style={styles.chatContainer}
contentContainerStyle={styles.chatContentContainer}
showsVerticalScrollIndicator={false}
// onContentSizeChange={() => scrollToEnd()}
/>
</Animated.View>
</View>
{/* 输入框区域 */}
<KeyboardAvoidingView
behavior={Platform.OS === "ios" ? "padding" : "height"}
keyboardVerticalOffset={0} >
<View style={styles.inputContainer} key={conversationId}>
<SendMessage
setIsHello={setIsHello}
conversationId={conversationId}
setConversationId={setConversationId}
setUserMessages={setUserMessages}
selectedImages={selectedImages}
setSelectedImages={setSelectedImages}
/>
</View>
<View style={styles.contentContainer}>
{/* 欢迎页面 */}
<Animated.View
style={[styles.absoluteView, welcomeStyle, { zIndex: 1 }]}
>
<AskHello setUserMessages={setUserMessages} setConversationId={setConversationId} setIsHello={setIsHello} />
</Animated.View>
{/* 聊天页面 */}
<Animated.View
style={[styles.absoluteView, chatStyle, { zIndex: 0 }]}
>
<Chat
ref={chatListRef}
userMessages={userMessages}
sessionId={sessionId}
setSelectedImages={setSelectedImages}
selectedImages={selectedImages}
style={styles.chatContainer}
contentContainerStyle={styles.chatContentContainer}
showsVerticalScrollIndicator={false}
// onContentSizeChange={() => scrollToEnd()}
/>
</Animated.View>
</View>
{/* 输入框区域 */}
<KeyboardAvoidingView
behavior={Platform.OS === "ios" ? "padding" : "height"}
keyboardVerticalOffset={0} >
<View style={styles.inputContainer} key={conversationId}>
<SendMessage
setIsHello={setIsHello}
conversationId={conversationId}
setConversationId={setConversationId}
setUserMessages={setUserMessages}
selectedImages={selectedImages}
setSelectedImages={setSelectedImages}
/>
</View>
</KeyboardAvoidingView>
</KeyboardAvoidingView>
</View>
);
}