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

View File

@ -16,7 +16,7 @@
<t-icon name="fullscreen-2" size="24rpx" data-name="fullscreen-2" wx:else /> <t-icon name="fullscreen-2" size="24rpx" data-name="fullscreen-2" wx:else />
</view> </view>
<view class="meeting-content-video-canvas" wx:if="{{currentUser.shareSrc}}"> <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>
<view class="meeting-content-video-canvas" wx:elif="{{currentUser.src && currentUser.enableCamera}}"> <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}}" /> <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> </view>
<view class="meeting-content-smallvideo-box-view-canvas" wx:if="{{item.src}}"> <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 /> <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>
<view class="meeting-content-smallvideo-box-view-user"> <view class="meeting-content-smallvideo-box-view-user">
@ -135,3 +135,4 @@
</view> </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({ wx.request({
...obj.params, ...obj.params,
url: apiBase + obj.params.url, url: apiBase + obj.params.url,
timeout: 500, timeout: 10000,
header: { header: {
'content-type': 'application/json', 'content-type': 'application/json',
'Authorization': `Bearer ${obj.token}` 'Authorization': `Bearer ${obj.token}`