fix:Fix the incomplete cleanup issue when the receiver exits the room

This commit is contained in:
david_bai
2025-08-17 23:56:09 +08:00
parent caa861f1bb
commit bb21c90a4e
8 changed files with 231 additions and 192 deletions
+20 -20
View File
@@ -1,6 +1,6 @@
import { useEffect, useMemo } from 'react';
import { webrtcService } from '@/lib/webrtcService';
import { useFileTransferStore } from '@/stores/fileTransferStore';
import { useEffect, useMemo } from "react";
import { webrtcService } from "@/lib/webrtcService";
import { useFileTransferStore } from "@/stores/fileTransferStore";
import type { Messages } from "@/types/messages";
// 保留类型定义以保持兼容性
@@ -10,10 +10,17 @@ export type ProgressState = { [fileId: string]: FileProgressPeers };
interface UseWebRTCConnectionProps {
messages: Messages | null;
putMessageInMs: (message: string, isShareEnd?: boolean, displayTimeMs?: number) => void;
putMessageInMs: (
message: string,
isShareEnd?: boolean,
displayTimeMs?: number
) => void;
}
export function useWebRTCConnection({ messages, putMessageInMs }: UseWebRTCConnectionProps) {
export function useWebRTCConnection({
messages,
putMessageInMs,
}: UseWebRTCConnectionProps) {
// 从 store 获取状态
const {
sharePeerCount,
@@ -41,15 +48,6 @@ export function useWebRTCConnection({ messages, putMessageInMs }: UseWebRTCConne
setIsAnyFileTransferring(isAnyFileTransferring);
}, [isAnyFileTransferring, setIsAnyFileTransferring]);
// 确保服务在 React 生命周期内被初始化
useEffect(() => {
console.log('[useWebRTCConnection] WebRTC 服务已初始化');
return () => {
console.log('[useWebRTCConnection] Hook 清理');
};
}, []);
return {
// 状态从 store 获取
sharePeerCount,
@@ -57,21 +55,23 @@ export function useWebRTCConnection({ messages, putMessageInMs }: UseWebRTCConne
senderDisconnected,
sendProgress,
receiveProgress,
// 方法直接从 service 暴露
broadcastDataToAllPeers: webrtcService.broadcastDataToAllPeers.bind(webrtcService),
broadcastDataToAllPeers:
webrtcService.broadcastDataToAllPeers.bind(webrtcService),
requestFile: webrtcService.requestFile.bind(webrtcService),
requestFolder: webrtcService.requestFolder.bind(webrtcService),
setReceiverDirectoryHandle: webrtcService.setReceiverDirectoryHandle.bind(webrtcService),
setReceiverDirectoryHandle:
webrtcService.setReceiverDirectoryHandle.bind(webrtcService),
getReceiverSaveType: webrtcService.getReceiverSaveType.bind(webrtcService),
manualSafeSave: webrtcService.manualSafeSave.bind(webrtcService),
// 重置连接方法
resetSenderConnection: () => webrtcService.leaveRoom(true),
resetReceiverConnection: () => webrtcService.leaveRoom(false),
// 为了兼容性,保留这些属性(但实际上不再需要)
sender: webrtcService.sender,
receiver: webrtcService.receiver,
};
}
}