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 @@
-