GramJs: Release borrowed senders after 30 seconds of idle
This commit is contained in:
parent
f696edbf97
commit
39fd19667e
@ -24,6 +24,7 @@ const { updateTwoFaSettings } = require('./2fa');
|
|||||||
const DEFAULT_DC_ID = 2;
|
const DEFAULT_DC_ID = 2;
|
||||||
const DEFAULT_IPV4_IP = 'venus.web.telegram.org';
|
const DEFAULT_IPV4_IP = 'venus.web.telegram.org';
|
||||||
const DEFAULT_IPV6_IP = '[2001:67c:4e8:f002::a]';
|
const DEFAULT_IPV6_IP = '[2001:67c:4e8:f002::a]';
|
||||||
|
const BORROWED_SENDER_RELEASE_TIMEOUT = 30 * 1000; // 10 sec
|
||||||
|
|
||||||
// All types
|
// All types
|
||||||
const sizeTypes = ['w', 'y', 'd', 'x', 'c', 'm', 'b', 'a', 's'];
|
const sizeTypes = ['w', 'y', 'd', 'x', 'c', 'm', 'b', 'a', 's'];
|
||||||
@ -131,6 +132,7 @@ class TelegramClient {
|
|||||||
this._config = undefined;
|
this._config = undefined;
|
||||||
this.phoneCodeHashes = [];
|
this.phoneCodeHashes = [];
|
||||||
this._borrowedSenderPromises = {};
|
this._borrowedSenderPromises = {};
|
||||||
|
this._borrowedSenderReleaseTimeouts = {};
|
||||||
this._additionalDcsDisabled = args.additionalDcsDisabled;
|
this._additionalDcsDisabled = args.additionalDcsDisabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -267,7 +269,7 @@ class TelegramClient {
|
|||||||
// export region
|
// export region
|
||||||
|
|
||||||
_cleanupBorrowedSender(dcId) {
|
_cleanupBorrowedSender(dcId) {
|
||||||
delete this._borrowedSenderPromises[dcId];
|
this._borrowedSenderPromises[dcId] = undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
_borrowExportedSender(dcId) {
|
_borrowExportedSender(dcId) {
|
||||||
@ -275,18 +277,30 @@ class TelegramClient {
|
|||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
let senderPromise = this._borrowedSenderPromises[dcId];
|
if (!this._borrowedSenderPromises[dcId]) {
|
||||||
if (!senderPromise) {
|
this._borrowedSenderPromises[dcId] = this._createExportedSender(dcId);
|
||||||
senderPromise = this._createExportedSender(dcId);
|
|
||||||
this._borrowedSenderPromises[dcId] = senderPromise;
|
|
||||||
|
|
||||||
senderPromise.then((sender) => {
|
|
||||||
if (!sender) {
|
|
||||||
delete this._borrowedSenderPromises[dcId];
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
return senderPromise;
|
|
||||||
|
return this._borrowedSenderPromises[dcId].then((sender) => {
|
||||||
|
if (!sender) {
|
||||||
|
this._borrowedSenderPromises[dcId] = undefined;
|
||||||
|
return this._borrowExportedSender(dcId);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this._borrowedSenderReleaseTimeouts[dcId]) {
|
||||||
|
clearTimeout(this._borrowedSenderReleaseTimeouts[dcId]);
|
||||||
|
this._borrowedSenderReleaseTimeouts[dcId] = undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
this._borrowedSenderReleaseTimeouts[dcId] = setTimeout(() => {
|
||||||
|
this._borrowedSenderReleaseTimeouts[dcId] = undefined;
|
||||||
|
this._borrowedSenderPromises[dcId] = undefined;
|
||||||
|
|
||||||
|
sender.disconnect();
|
||||||
|
}, BORROWED_SENDER_RELEASE_TIMEOUT);
|
||||||
|
|
||||||
|
return sender;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
async _createExportedSender(dcId) {
|
async _createExportedSender(dcId) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user