From 60f42eb5482f183abf35fca77b351b526c2b7305 Mon Sep 17 00:00:00 2001 From: david_bai Date: Sat, 7 Jun 2025 19:17:52 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9BaseWebRTC=20=E7=9A=84?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E6=B3=A8=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/hooks/useWebRTCConnection.ts | 15 ++++++++++++--- frontend/lib/webrtc_Initiator.ts | 6 +++--- frontend/lib/webrtc_Recipient.ts | 6 +++--- frontend/lib/webrtc_base.ts | 15 ++++++++++----- 4 files changed, 28 insertions(+), 14 deletions(-) diff --git a/frontend/hooks/useWebRTCConnection.ts b/frontend/hooks/useWebRTCConnection.ts index 94eb737..aebfc33 100644 --- a/frontend/hooks/useWebRTCConnection.ts +++ b/frontend/hooks/useWebRTCConnection.ts @@ -3,7 +3,11 @@ import WebRTC_Initiator from "@/lib/webrtc_Initiator"; import WebRTC_Recipient from "@/lib/webrtc_Recipient"; import FileSender from "@/lib/fileSender"; import FileReceiver from "@/lib/fileReceiver"; -import { config } from "@/app/config/environment"; // For API_URL +import { + config, + getIceServers, + getSocketOptions, +} from "@/app/config/environment"; import type { CustomFile, fileMetadata, FileMeta } from "@/types/webrtc"; // Assuming FileMeta might be used by caller import type { Messages } from "@/types/messages"; @@ -55,8 +59,13 @@ export function useWebRTCConnection({ // Initialize WebRTC objects and their cleanup useEffect(() => { - const senderConn = new WebRTC_Initiator(config.API_URL); - const receiverConn = new WebRTC_Recipient(config.API_URL); + const webRTCConfig = { + iceServers: getIceServers(), + socketOptions: getSocketOptions()|| {}, + signalingServer: config.API_URL, + }; + const senderConn = new WebRTC_Initiator(webRTCConfig); + const receiverConn = new WebRTC_Recipient(webRTCConfig); setSender(senderConn); setReceiver(receiverConn); diff --git a/frontend/lib/webrtc_Initiator.ts b/frontend/lib/webrtc_Initiator.ts index 436d521..d742531 100644 --- a/frontend/lib/webrtc_Initiator.ts +++ b/frontend/lib/webrtc_Initiator.ts @@ -1,11 +1,11 @@ // 发起方 流程: 加入房间; 收到 'ready' 事件(新的接收方进入后socker server就会触发这个事件) -> createPeerConnection + createDataChannel -> createAndSendOffer -import BaseWebRTC from './webrtc_base'; +import BaseWebRTC, { WebRTCConfig } from './webrtc_base'; import { postLogInDebug } from '@/app/config/api'; const developmentEnv = process.env.NEXT_PUBLIC_development!;//开发环境 export default class WebRTC_Initiator extends BaseWebRTC { - constructor(signalingServer: string) { - super(signalingServer); + constructor(config: WebRTCConfig) { + super(config); this.setupInitiatorSocketListeners(); } diff --git a/frontend/lib/webrtc_Recipient.ts b/frontend/lib/webrtc_Recipient.ts index bd6dfdc..51d06f9 100644 --- a/frontend/lib/webrtc_Recipient.ts +++ b/frontend/lib/webrtc_Recipient.ts @@ -1,5 +1,5 @@ // 接收方 流程: 加入房间; 收到 'offer' 事件 -> createPeerConnection + createDataChannel -> 发送 answer -import BaseWebRTC from './webrtc_base'; +import BaseWebRTC, { WebRTCConfig } from './webrtc_base'; import { postLogInDebug } from '@/app/config/api'; const developmentEnv = process.env.NEXT_PUBLIC_development!;//开发环境 @@ -8,8 +8,8 @@ interface AnswerPayload { peerId: string; } export default class WebRTC_Recipient extends BaseWebRTC { - constructor(signalingServer: string) { - super(signalingServer); + constructor(config: WebRTCConfig) { + super(config); this.setupRecipientSocketListeners(); } diff --git a/frontend/lib/webrtc_base.ts b/frontend/lib/webrtc_base.ts index 8328736..95374ac 100644 --- a/frontend/lib/webrtc_base.ts +++ b/frontend/lib/webrtc_base.ts @@ -1,6 +1,5 @@ // BaseWebRTC.js -import io from 'socket.io-client'; -import { Socket } from 'socket.io-client'; +import io, { Socket, ManagerOptions, SocketOptions } from 'socket.io-client'; import { getIceServers, getSocketOptions } from '@/app/config/environment'; import { WakeLockManager } from './wakeLockManager'; import { postLogInDebug } from '@/app/config/api'; @@ -19,6 +18,12 @@ interface CallbackTypes { onConnectionStateChange?: (state: RTCPeerConnectionState, peerId: string) => void; } +export interface WebRTCConfig { + iceServers: RTCIceServer[]; + socketOptions: Partial; + signalingServer: string;// signalingServer: 信令服务器的URL,用于初始化Socket.IO连接。 +} + export default class BaseWebRTC { //类型申明 protected iceServers: RTCIceServer[]; @@ -42,9 +47,9 @@ export default class BaseWebRTC { protected reconnectionInProgress: boolean;//防止重复重连 protected wakeLockManager: WakeLockManager; - constructor(signalingServer: string) {// signalingServer: 信令服务器的URL,用于初始化Socket.IO连接。 - this.iceServers = getIceServers(); - this.socket = io(signalingServer, getSocketOptions()); + constructor(config: WebRTCConfig) { + this.iceServers = config.iceServers; + this.socket = io(config.signalingServer, config.socketOptions); this.peerConnections = new Map();// Map this.dataChannels = new Map();// Map