Browse Source

Force reconnect timeout on online event

master
Eduard Kuzmenko 3 years ago
parent
commit
c95d2a83f2
  1. 4
      src/lib/mtproto/mtproto.worker.ts
  2. 4
      src/lib/mtproto/mtprotoworker.ts
  3. 6
      src/lib/mtproto/networker.ts
  4. 6
      src/lib/mtproto/networkerFactory.ts
  5. 25
      src/lib/mtproto/transports/tcpObfuscated.ts

4
src/lib/mtproto/mtproto.worker.ts

@ -86,6 +86,10 @@ const taskListeners = { @@ -86,6 +86,10 @@ const taskListeners = {
userAgent: (task: any) => {
networkerFactory.userAgent = task.payload;
},
online: () => {
networkerFactory.forceReconnectTimeout();
}
};

4
src/lib/mtproto/mtprotoworker.ts

@ -188,6 +188,10 @@ export class ApiManagerProxy extends CryptoWorkerMethods { @@ -188,6 +188,10 @@ export class ApiManagerProxy extends CryptoWorkerMethods {
this.performTaskWorkerVoid('setLanguage', language);
});
window.addEventListener('online', (event) => {
this.postMessage({type: 'online'});
});
/// #if !MTPROTO_SW
this.registerWorker();
/// #endif

6
src/lib/mtproto/networker.ts

@ -374,6 +374,12 @@ export default class MTPNetworker { @@ -374,6 +374,12 @@ export default class MTPNetworker {
(this.transport as TcpObfuscated).destroy();
}
public forceReconnectTimeout() {
if((this.transport as TcpObfuscated).reconnect) {
(this.transport as TcpObfuscated).reconnect();
}
}
// private sendPingDelayDisconnect = () => {
// if(this.pingPromise || true) return;

6
src/lib/mtproto/networkerFactory.ts

@ -66,6 +66,12 @@ export class NetworkerFactory { @@ -66,6 +66,12 @@ export class NetworkerFactory {
}
}
}
public forceReconnectTimeout() {
for(const networker of this.networkers) {
networker.forceReconnectTimeout();
}
}
}
const networkerFactory = new NetworkerFactory();

25
src/lib/mtproto/transports/tcpObfuscated.ts

@ -111,12 +111,7 @@ export default class TcpObfuscated implements MTTransport { @@ -111,12 +111,7 @@ export default class TcpObfuscated implements MTTransport {
};
private onClose = () => {
this.connected = false;
this.connection.removeEventListener('open', this.onOpen);
this.connection.removeEventListener('close', this.onClose);
this.connection.removeEventListener('message', this.onMessage);
this.connection = undefined;
this.clear();
let needTimeout: number;
if(this.autoReconnect) {
@ -138,6 +133,17 @@ export default class TcpObfuscated implements MTTransport { @@ -138,6 +133,17 @@ export default class TcpObfuscated implements MTTransport {
}
};
private clear() {
this.connected = false;
if(this.connection) {
this.connection.removeEventListener('open', this.onOpen);
this.connection.removeEventListener('close', this.onClose);
this.connection.removeEventListener('message', this.onMessage);
this.connection = undefined;
}
}
/**
* invoke only when closed
*/
@ -147,7 +153,7 @@ export default class TcpObfuscated implements MTTransport { @@ -147,7 +153,7 @@ export default class TcpObfuscated implements MTTransport {
this.reconnectTimeout = undefined;
}
if(this.connected) {
if(this.connection) {
return;
}
@ -194,6 +200,11 @@ export default class TcpObfuscated implements MTTransport { @@ -194,6 +200,11 @@ export default class TcpObfuscated implements MTTransport {
}
private connect() {
if(this.connection) {
this.close();
this.clear();
}
this.connection = new this.Connection(this.dcId, this.url, this.logSuffix);
this.connection.addEventListener('open', this.onOpen);
this.connection.addEventListener('close', this.onClose);

Loading…
Cancel
Save