diff --git a/main.js b/main.js index fb62569..b460344 100644 --- a/main.js +++ b/main.js @@ -719,7 +719,7 @@ const startSignalr = async (user) => { accessTokenFactory: () => user.token }) .build(); - onStart() + connection.start(); mainWindow.webContents.send('changeLocalStorage', { isSignalr: true, reconnect: true, @@ -739,9 +739,10 @@ const startSignalr = async (user) => { const onStart = async () => { if (connection) { - if (connection.state !== signalR.HubConnectionState.Connected) { + if (connection.state === signalR.HubConnectionState.Disconnected) { connection.start(); - } else { + } + if (connection.state !== signalR.HubConnectionState.Connected) { setTimeout(onStart, 3000); } } diff --git a/src/page/Meeting/index.tsx b/src/page/Meeting/index.tsx index a31d407..175060d 100644 --- a/src/page/Meeting/index.tsx +++ b/src/page/Meeting/index.tsx @@ -1036,21 +1036,26 @@ const Meeting: React.FC = () => { onRtcStats: async (stats: RtcStats) => { setNetworkOther(stats) }, - onConnectionStateChanged: async (_connection: RtcConnection, stateNumber: ConnectionStateType, reason: ConnectionChangedReasonType) => { + onConnectionStateChanged: async (_connection: RtcConnection, state: ConnectionStateType, reason: ConnectionChangedReasonType) => { const reconnectingCode = [2, 16, 11, 13, 14, 12] - if (stateNumber === 4 && reconnectingCode.indexOf(reason) >= 0) { - meetingDisconnectedRef.current.changeModal(true) - setIsScreenCapture(bool => { - if (bool) { - setIsNetworkDisconnected(true) - stopScreenCapture() - } - return bool - }) - } else if (stateNumber === 3) { - meetingDisconnectedRef.current.changeModal(false) + if (state === 4 && reconnectingCode.indexOf(reason) >= 0) { + + } else if (state === 3) { + if (storage.getItem('reconnect') === 'true') { + meetingDisconnectedRef.current.changeModal(false) + } } }, + onConnectionLost: () => { + meetingDisconnectedRef.current.changeModal(true) + setIsScreenCapture(bool => { + if (bool) { + setIsNetworkDisconnected(true) + stopScreenCapture() + } + return bool + }) + }, onLocalVideoStateChanged: async (_source: VideoSourceType, _state: LocalVideoStreamState, reason: LocalVideoStreamReason) => { if (reason === 12) { setIsScreenCapture(bool => { @@ -2925,7 +2930,7 @@ const networkIcon = (network: number) => { switch (network) { case 0: return - + diff --git a/src/utils/package/agora.ts b/src/utils/package/agora.ts index 63b7516..041dab9 100644 --- a/src/utils/package/agora.ts +++ b/src/utils/package/agora.ts @@ -150,7 +150,7 @@ export const agora = { }, 1000); }, // 事件回调 - registerEventHandler: ({ onJoinChannelSuccess, onUserJoined, onUserOffline, onAudioVolumeIndication, onNetworkQuality, onRtcStats, onConnectionStateChanged, onLocalVideoStateChanged }: any) => { + registerEventHandler: ({ onJoinChannelSuccess, onUserJoined, onUserOffline, onAudioVolumeIndication, onNetworkQuality, onRtcStats, onConnectionStateChanged, onLocalVideoStateChanged, onConnectionLost }: any) => { rtcEngine.registerEventHandler({ // 监听本地用户加入频道事件 onJoinChannelSuccess: async (connection: RtcConnection, elapsed: number) => { @@ -196,6 +196,10 @@ export const agora = { onLocalVideoStateChanged: async (source: VideoSourceType, state: LocalVideoStreamState, reason: LocalVideoStreamReason) => { await onLocalVideoStateChanged?.(source, state, reason) }, + // 网络连接中断,且 SDK 无法在 10 秒内连接服务器回调。 + onConnectionLost: (_connection: RtcConnection) => { + onConnectionLost?.() + } }); }, // 获取视图模式