From 18eb8f136a6a7f7f20dd7175f4eed5b36fc5bf2f Mon Sep 17 00:00:00 2001
From: yj <1336058017@qq.com>
Date: Tue, 11 Feb 2025 16:37:05 +0800
Subject: [PATCH] =?UTF-8?q?=E6=BB=9A=E5=8A=A8=E6=9D=A1=E6=A0=B7=E5=BC=8F&?=
=?UTF-8?q?=E5=88=87=E5=88=80=E5=90=8E=E5=8F=B0=E9=87=8D=E8=BF=9B=E5=B0=8F?=
=?UTF-8?q?=E7=A8=8B=E5=BA=8F=E9=9C=80=E9=87=8D=E8=BF=9E?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
pages/meeting/index.scss | 1 +
pages/meeting/index.ts | 98 ++++++++++++++++++++++++++++++++++++++--
pages/meeting/index.wxml | 12 ++---
utils/agora.ts | 27 ++++++++---
utils/request.js | 19 +++++++-
utils/singlr.ts | 4 +-
6 files changed, 144 insertions(+), 17 deletions(-)
diff --git a/pages/meeting/index.scss b/pages/meeting/index.scss
index 8172d58..908d0bd 100644
--- a/pages/meeting/index.scss
+++ b/pages/meeting/index.scss
@@ -74,6 +74,7 @@
height: 100vh;
display: flex;
flex-direction: column;
+ overflow: hidden;
&-content {
flex-grow: 1;
diff --git a/pages/meeting/index.ts b/pages/meeting/index.ts
index 18c02c3..5c59071 100644
--- a/pages/meeting/index.ts
+++ b/pages/meeting/index.ts
@@ -1,10 +1,13 @@
-import { GetRoomInfo, GetRoomUser, GetShowUser, GetApplySpeak, PostMuteAll, PostOpenMicr, PostOpenCamera, DeleteRoomManager } from '../../api/meeting/index'
+import { GetRoomInfo, GetRoomUser, GetShowUser, GetApplySpeak, PostMuteAll, PostOpenMicr, PostOpenCamera, DeleteRoomManager, PostRoomManager } from '../../api/meeting/index'
+import { GetRoomRtcToken } from '../../api/form/index'
import { agora } from '../../utils/agora'
-import { onInvoke, onSignalr } from '../../utils/singlr'
+import { onInvoke, onSignalr, getSignIr, offSignalr } from '../../utils/singlr'
import { role, getStorage } from '../../utils/utils'
import { Message } from 'tdesign-miniprogram';
+import * as signalR from "signalr-for-wx";
import dayjs from 'dayjs';
const computedBehavior = require('miniprogram-computed').behavior;
+let reconnectTime = "" as any;
Page({
behaviors: [computedBehavior],
data: {
@@ -92,7 +95,9 @@ Page({
'听得到',
'听不到',
'我要发言',
- ]
+ ],
+ isFirstShow: true,
+ isCurrePage: false,
},
watch: {
'roomUserList.**': function (roomUserList) {
@@ -198,11 +203,91 @@ Page({
onReady() {
wx.onNetworkStatusChange(this.listener)
},
+ onShow() {
+ this.setData({
+ isCurrePage: true
+ })
+ if (this.data.isFirstShow) {
+ this.setData({
+ isFirstShow: false,
+ })
+ } else {
+ const item = this.data.roomUserList.find(row => row.uid === this.data.user.uid)
+ if (item && !item.isRoomManager) {
+ wx.showLoading({
+ title: '重连中',
+ })
+ agora.destroy(() => {
+ reconnectTime = setInterval(() => {
+ if (getSignIr() === signalR.HubConnectionState.Connected) {
+ this.reconnecFun()
+ clearInterval(reconnectTime)
+ reconnectTime = ''
+ }
+ }, 2000)
+ })
+ }
+ }
+ },
+ onHide() {
+ this.setData({
+ isCurrePage: false
+ })
+ if (reconnectTime) {
+ clearInterval(reconnectTime)
+ reconnectTime = ''
+ }
+ wx.hideLoading()
+ },
onUnload() {
wx.offNetworkStatusChange(this.listener)
+ if (reconnectTime) {
+ clearInterval(reconnectTime)
+ reconnectTime = ''
+ }
+ },
+ async reconnecFun() {
+ offSignalr()
+ await GetRoomRtcToken(this.data.channelId).then(res => {
+ if (res.code === 200) {
+ agora.reconnecSetOption(res.data, async () => {
+ await this.joinChannel()
+ this.startClientEvent()
+ this.startSignalr()
+ await this.getRoomUser()
+ await this.getShowUser()
+ wx.hideLoading()
+ Message.success({
+ context: this,
+ offset: [90, 32],
+ duration: 3000,
+ content: '重连成功',
+ });
+ })
+ } else {
+ wx.hideLoading()
+ Message.error({
+ context: this,
+ offset: [90, 32],
+ duration: 3000,
+ content: '重连失败,请退出房间重试!',
+ });
+ }
+ }).catch(() => {
+ wx.hideLoading()
+ Message.error({
+ context: this,
+ offset: [90, 32],
+ duration: 3000,
+ content: '重连失败,请退出房间重试!',
+ });
+ })
},
startSignalr() {
onSignalr(async (item) => {
+ if (!this.data.isCurrePage) {
+ return
+ }
const userInfo: any = await getStorage('user')
switch (item.key) {
// 聊天
@@ -398,6 +483,13 @@ Page({
})
}
});
+ },
+ tokenRef: () => {
+ GetRoomRtcToken(this.data.channelId).then(res => {
+ if (res.code === 200) {
+ agora.renewToken(res.data)
+ }
+ })
}
})
},
diff --git a/pages/meeting/index.wxml b/pages/meeting/index.wxml
index b1d60a8..06aa04e 100644
--- a/pages/meeting/index.wxml
+++ b/pages/meeting/index.wxml
@@ -19,7 +19,7 @@
-
+
@@ -38,8 +38,8 @@
-
-
+
+
@@ -96,7 +96,7 @@
-
+
@@ -115,7 +115,7 @@
-