Browse Source

Force reconnect timeout on online event

master
Eduard Kuzmenko 4 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 = {
userAgent: (task: any) => { userAgent: (task: any) => {
networkerFactory.userAgent = task.payload; networkerFactory.userAgent = task.payload;
},
online: () => {
networkerFactory.forceReconnectTimeout();
} }
}; };

4
src/lib/mtproto/mtprotoworker.ts

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

6
src/lib/mtproto/networker.ts

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

6
src/lib/mtproto/networkerFactory.ts

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

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

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

Loading…
Cancel
Save