mirror of
https://github.com/xfgryujk/blivechat.git
synced 2025-01-13 22:00:15 +08:00
当页面不可见时暂时不重连,防止重连后又心跳超时
This commit is contained in:
parent
ee3b11e001
commit
9663a77338
@ -24,24 +24,32 @@ export default class ChatClientDirectOpenLive extends ChatClientOfficialBase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
stop() {
|
stop() {
|
||||||
super.stop()
|
|
||||||
|
|
||||||
if (this.gameHeartbeatTimerId) {
|
|
||||||
window.clearTimeout(this.gameHeartbeatTimerId)
|
|
||||||
this.gameHeartbeatTimerId = null
|
|
||||||
}
|
|
||||||
this.endGame()
|
this.endGame()
|
||||||
|
super.stop()
|
||||||
}
|
}
|
||||||
|
|
||||||
async initRoom() {
|
async initRoom() {
|
||||||
if (!await this.startGame()) {
|
return this.startGame()
|
||||||
return false
|
}
|
||||||
|
|
||||||
|
async wsConnect() {
|
||||||
|
await super.wsConnect()
|
||||||
|
if (this.isDestroying) {
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.gameId && this.gameHeartbeatTimerId === null) {
|
if (this.gameId && this.gameHeartbeatTimerId === null) {
|
||||||
this.gameHeartbeatTimerId = window.setTimeout(this.onSendGameHeartbeat.bind(this), GAME_HEARTBEAT_INTERVAL)
|
this.gameHeartbeatTimerId = window.setTimeout(this.onSendGameHeartbeat.bind(this), GAME_HEARTBEAT_INTERVAL)
|
||||||
}
|
}
|
||||||
return true
|
}
|
||||||
|
|
||||||
|
onWsClose() {
|
||||||
|
if (this.gameHeartbeatTimerId) {
|
||||||
|
window.clearTimeout(this.gameHeartbeatTimerId)
|
||||||
|
this.gameHeartbeatTimerId = null
|
||||||
|
}
|
||||||
|
|
||||||
|
super.onWsClose()
|
||||||
}
|
}
|
||||||
|
|
||||||
async startGame() {
|
async startGame() {
|
||||||
@ -139,10 +147,11 @@ export default class ChatClientDirectOpenLive extends ChatClientOfficialBase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async onBeforeWsConnect() {
|
async onBeforeWsConnect() {
|
||||||
// 重连次数太多则重新init_room,保险
|
// 重连次数太多则重新initRoom,保险
|
||||||
let reinitPeriod = Math.max(3, (this.hostServerUrlList || []).length)
|
let reinitPeriod = Math.max(3, (this.hostServerUrlList || []).length)
|
||||||
if (this.retryCount > 0 && this.retryCount % reinitPeriod === 0) {
|
if (this.retryCount > 0 && this.retryCount % reinitPeriod === 0) {
|
||||||
this.needInitRoom = true
|
this.needInitRoom = true
|
||||||
|
await this.endGame()
|
||||||
}
|
}
|
||||||
return super.onBeforeWsConnect()
|
return super.onBeforeWsConnect()
|
||||||
}
|
}
|
||||||
@ -155,6 +164,16 @@ export default class ChatClientDirectOpenLive extends ChatClientOfficialBase {
|
|||||||
this.websocket.send(this.makePacket(this.authBody, base.OP_AUTH))
|
this.websocket.send(this.makePacket(this.authBody, base.OP_AUTH))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
delayReconnect() {
|
||||||
|
if (document.visibilityState !== 'visible') {
|
||||||
|
// 不知道什么时候才能重连,先endGame吧
|
||||||
|
this.needInitRoom = true
|
||||||
|
this.endGame()
|
||||||
|
}
|
||||||
|
|
||||||
|
super.delayReconnect()
|
||||||
|
}
|
||||||
|
|
||||||
async dmCallback(command) {
|
async dmCallback(command) {
|
||||||
let data = command.data
|
let data = command.data
|
||||||
|
|
||||||
|
@ -200,7 +200,24 @@ export default class ChatClientOfficialBase {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
window.setTimeout(this.wsConnect.bind(this), this.getReconnectInterval())
|
this.delayReconnect()
|
||||||
|
}
|
||||||
|
|
||||||
|
delayReconnect() {
|
||||||
|
if (document.visibilityState === 'visible') {
|
||||||
|
window.setTimeout(this.wsConnect.bind(this), this.getReconnectInterval())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 页面不可见就先不重连了,即使重连也会心跳超时
|
||||||
|
let listener = () => {
|
||||||
|
if (document.visibilityState !== 'visible') {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
document.removeEventListener('visibilitychange', listener)
|
||||||
|
this.wsConnect()
|
||||||
|
}
|
||||||
|
document.addEventListener('visibilitychange', listener)
|
||||||
}
|
}
|
||||||
|
|
||||||
getReconnectInterval() {
|
getReconnectInterval() {
|
||||||
|
@ -107,6 +107,7 @@ export default class ChatClientRelay {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 这边不用判断页面是否可见,因为发心跳包不是由定时器触发的,即使是不活动页面也不会心跳超时
|
||||||
window.setTimeout(this.wsConnect.bind(this), this.getReconnectInterval())
|
window.setTimeout(this.wsConnect.bind(this), this.getReconnectInterval())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user