This commit is contained in:
yj 2025-02-13 15:37:26 +08:00
parent 067c9a1042
commit 23f6ea5ba8
3 changed files with 107 additions and 27 deletions

View File

@ -8,6 +8,8 @@ import * as signalR from "signalr-for-wx";
import dayjs from 'dayjs';
const computedBehavior = require('miniprogram-computed').behavior;
let reconnectTime = "" as any;
let refreshTime = "" as any;
let isReconnecTimeSetTimeout = "" as any;
Page({
behaviors: [computedBehavior],
data: {
@ -97,7 +99,9 @@ Page({
'我要发言',
],
isFirstShow: true,
isCurrePage: false,
isCurrePage: true,
isReconnec: false,
isReconnecTime: false,
},
watch: {
'roomUserList.**': function (roomUserList) {
@ -138,6 +142,50 @@ Page({
}, 10000);
}
},
'isReconnecTime': function (isReconnecTime) {
if (isReconnecTime) {
isReconnecTimeSetTimeout = setTimeout(() => {
clearTimeout(isReconnecTimeSetTimeout)
this.setData({
isReconnec: true,
isReconnecTime: false,
})
isReconnecTimeSetTimeout = ''
wx.hideLoading()
}, 8000)
} else {
if (isReconnecTimeSetTimeout) {
clearTimeout(isReconnecTimeSetTimeout)
isReconnecTimeSetTimeout = ''
wx.hideLoading()
}
}
},
'isCurrePage': function (isCurrePage) {
if (isCurrePage) {
if (refreshTime) {
clearInterval(refreshTime)
refreshTime = ''
}
} else {
refreshTime = setInterval(() => {
GetRoomUser(this.data.channelId).then(res => {
if (res.code === 200) {
res.data.forEach((item: any) => {
let row = this.data.roomUserList.find((row: any) => row.uid == item.uid);
if (row) {
row.enableCamera = item.enableCamera;
row.enableMicr = item.enableMicr;
row.isRoomManager = item.isRoomManager;
row.isAdmin = role.ID.includes(item.roleId) || item.isRoomManager;
}
});
this.changeAgoraDevice()
}
})
}, 1000 * 30)
}
},
'currentUid': function (currentUid) {
this.data.roomUserList.forEach(item => {
if (item.src) {
@ -205,7 +253,7 @@ Page({
},
onShow() {
this.setData({
isCurrePage: true
isCurrePage: false
})
if (this.data.isFirstShow) {
this.setData({
@ -218,6 +266,9 @@ Page({
title: '重连中',
mask: true
})
this.setData({
isReconnecTime: true,
})
agora.destroy(() => {
reconnectTime = setInterval(() => {
if (getSignIr() === signalR.HubConnectionState.Connected) {
@ -232,13 +283,21 @@ Page({
},
onHide() {
this.setData({
isCurrePage: false
isCurrePage: true,
isReconnecTime: false
})
if (reconnectTime) {
clearInterval(reconnectTime)
reconnectTime = ''
}
wx.hideLoading()
if (isReconnecTimeSetTimeout) {
clearInterval(isReconnecTimeSetTimeout)
isReconnecTimeSetTimeout = ''
}
if (refreshTime) {
clearInterval(refreshTime)
refreshTime = ''
}
},
onUnload() {
wx.offNetworkStatusChange(this.listener)
@ -246,6 +305,14 @@ Page({
clearInterval(reconnectTime)
reconnectTime = ''
}
if (isReconnecTimeSetTimeout) {
clearInterval(isReconnecTimeSetTimeout)
isReconnecTimeSetTimeout = ''
}
if (refreshTime) {
clearInterval(refreshTime)
refreshTime = ''
}
},
async reconnecFun() {
offSignalr()
@ -258,37 +325,39 @@ Page({
this.startSignalr()
await this.getRoomUser()
await this.getShowUser()
Message.success({
context: this,
offset: [20, 32],
duration: 3000,
content: '重连成功',
});
this.setData({
isReconnecTime: false,
isReconnec: false
})
} else {
this.setData({
isReconnec: true
})
}
wx.hideLoading()
Message.success({
context: this,
offset: [20, 32],
duration: 3000,
content: bool ? '重连成功' : '重连失败,请退出房间重试!',
});
})
} else {
wx.hideLoading()
Message.error({
context: this,
offset: [20, 32],
duration: 3000,
content: '重连失败,请退出房间重试!',
});
this.setData({
isReconnec: true
})
}
}).catch(() => {
wx.hideLoading()
Message.error({
context: this,
offset: [20, 32],
duration: 3000,
content: '重连失败,请退出房间重试!',
});
this.setData({
isReconnec: true
})
})
},
startSignalr() {
onSignalr(async (item) => {
if (!this.data.isCurrePage) {
if (this.data.isCurrePage) {
return
}
const userInfo: any = await getStorage('user')
@ -922,6 +991,16 @@ Page({
})
}
},
closeRoom() {
wx.disableAlertBeforeUnload({
complete: () => {
this.setData({
isReconnec: false
})
wx.navigateBack()
}
})
},
scroll() {
},

View File

@ -16,7 +16,7 @@
<t-icon name="fullscreen-2" size="24rpx" data-name="fullscreen-2" wx:else />
</view>
<view class="meeting-content-video-canvas" wx:if="{{currentUser.shareSrc}}">
<live-player id="player" src="{{currentUser.shareSrc}}" mode="RTC" autoplay="true" bindstatechange="playerStateChange" object-fit="contain" />
<live-player id="player" src="{{currentUser.shareSrc}}" mode="RTC" autoplay="true" bindstatechange="playerStateChange" object-fit="contain"/>
</view>
<view class="meeting-content-video-canvas" wx:elif="{{currentUser.src && currentUser.enableCamera}}">
<live-player id="player" src="{{currentUser.src}}" mode="RTC" autoplay="true" bindstatechange="playerStateChange" object-fit="contain" muted="{{currentUser.uid === user.uid}}" />
@ -38,7 +38,7 @@
</view>
</view>
<view class="meeting-content-smallvideo-box-view-canvas" wx:if="{{item.src}}">
<live-pusher wx:if="{{user.uid === item.uid}}" url="{{item.src}}" mode="RTC" object-fit="contain" bindstatechange="recorderStateChange" background-mute enable-mic="{{footerList[1].active}}" enable-camera max-bitrate="500" min-bitrate="200" autopush enable-agc enable-ans device-position="front" class="meeting-content-smallvideo-box-view-canvas-play" data-uid="{{item.uid}}" bindaudiovolumenotify="playerAudioVolumenotify" beauty='{{9}}' whiteness='{{9}}' />
<live-pusher wx:if="{{user.uid === item.uid}}" url="{{item.src}}" mode="RTC" object-fit="contain" bindstatechange="recorderStateChange" background-mute enable-mic="{{footerList[1].active}}" enable-camera max-bitrate="500" min-bitrate="200" autopush enable-agc enable-ans device-position="front" class="meeting-content-smallvideo-box-view-canvas-play" data-uid="{{item.uid}}" bindaudiovolumenotify="playerAudioVolumenotify" beauty='{{9}}' whiteness='{{9}}' />
<live-player src="{{item.src}}" class="meeting-content-smallvideo-box-view-canvas-play" mode="RTC" autoplay="true" bindstatechange="playerStateChange" object-fit="contain" data-uid="{{item.uid}}" bindaudiovolumenotify="playerAudioVolumenotify" wx:else />
</view>
<view class="meeting-content-smallvideo-box-view-user">
@ -134,4 +134,5 @@
<view class="chat-popup-input-submit" bind:tap="sendMeg">发送</view>
</view>
</view>
</t-popup>
</t-popup>
<t-dialog visible="{{isReconnec}}" content="重连失败,请退出重试!" confirm-btn="{{ { content: '确定', variant: 'base', theme: 'primary' } }}" data-type="isReconnec" cancel-btn="{{null}}" bind:confirm="closeRoom" style="transform: scale(0.5) translate3d(-50%, -50%, 0);" close-btn="{{false}}" />

View File

@ -38,7 +38,7 @@ function requestMethods(obj, callback) {
wx.request({
...obj.params,
url: apiBase + obj.params.url,
timeout: 500,
timeout: 10000,
header: {
'content-type': 'application/json',
'Authorization': `Bearer ${obj.token}`