fix(core): reconnection fixes

This commit is contained in:
alina 🌸 2024-12-17 08:42:49 +03:00
parent 6b430c5a2a
commit 36abe3defd
Signed by: teidesu
SSH key fingerprint: SHA256:uNeCpw6aTSU4aIObXLvHfLkDa82HWH9EiOj9AXOIRpI
2 changed files with 11 additions and 6 deletions

View file

@ -37,8 +37,7 @@ export abstract class PersistentConnection {
// inactivity timeout
private _inactivityTimeout: timers.Timer | null = null
private _inactive = true
_inactive = true
_destroyed = false
_usable = false
@ -169,6 +168,11 @@ export abstract class PersistentConnection {
}
reconnect(): void {
if (this._disconnectedManually) {
this._disconnectedManually = false
this.connect()
return
}
this._fuman.reconnect(true)
}
@ -176,6 +180,7 @@ export abstract class PersistentConnection {
if (this._inactivityTimeout) {
timers.clearTimeout(this._inactivityTimeout)
}
this._disconnectedManually = true
await this._fuman.close()
}

View file

@ -237,7 +237,7 @@ export class SessionConnection extends PersistentConnection {
if (this._usePfs) {
if (!this._isPfsBindingPending && this._session._authKeyTemp.ready) {
this.log.info('transport error 404, reauthorizing pfs')
this.log.debug('transport error 404, reauthorizing pfs')
// this is important! we must reset temp auth key before
// we proceed with new temp key derivation.
@ -253,7 +253,7 @@ export class SessionConnection extends PersistentConnection {
return
} else if (this._isPfsBindingPending) {
this.log.info('transport error 404, pfs binding in progress')
this.log.debug('transport error 404, pfs binding in progress')
this._onAllFailed('temp key expired, binding pending')
@ -264,11 +264,10 @@ export class SessionConnection extends PersistentConnection {
}
// there happened a little trolling
this.log.info('transport error 404, reauthorizing')
this.log.warn('transport error 404, reauthorizing')
this._session.resetAuthKey()
this._resetSession()
this.onKeyChange.emit(null)
this.onError.emit(error)
return
}
@ -1488,6 +1487,7 @@ export class SessionConnection extends PersistentConnection {
this._online = online
if (online) {
if (this._inactive) return
this.reconnect()
} else {
this.disconnectManual().catch((err) => {