Resilience to quick reconnects: always reprocess from cache first

This commit is contained in:
Scott Nonnenberg 2020-10-08 14:57:17 -07:00 committed by Josh Perez
parent f21dad1519
commit 0122cfd22a
2 changed files with 12 additions and 9 deletions

View file

@ -1809,22 +1809,21 @@ type WhatIsThis = typeof window.WhatIsThis;
}
connectCount += 1;
const options = {
retryCached: connectCount === 1,
serverTrustRoot: window.getServerTrustRoot(),
};
window.Whisper.deliveryReceiptQueue.pause(); // avoid flood of delivery receipts until we catch up
window.Whisper.Notifications.disable(); // avoid notification flood until empty
// initialize the socket and start listening for messages
window.log.info('Initializing socket and listening for messages');
const messageReceiverOptions = {
serverTrustRoot: window.getServerTrustRoot(),
};
messageReceiver = new window.textsecure.MessageReceiver(
OLD_USERNAME,
USERNAME,
PASSWORD,
mySignalingKey,
options as WhatIsThis
messageReceiverOptions as WhatIsThis
);
window.textsecure.messageReceiver = messageReceiver;
@ -2151,6 +2150,12 @@ type WhatIsThis = typeof window.WhatIsThis;
window.Whisper.events.on('manualConnect', manualConnect);
function manualConnect() {
if (isSocketOnline()) {
window.log.info('manualConnect: already online; not connecting again');
return;
}
window.log.info('manualConnect: calling connect()');
connect();
}

View file

@ -146,7 +146,6 @@ class MessageReceiverInner extends EventTarget {
signalingKey: ArrayBuffer,
options: {
serverTrustRoot: string;
retryCached?: string;
}
) {
super();
@ -196,9 +195,8 @@ class MessageReceiverInner extends EventTarget {
processBatch: this.cacheRemoveBatch.bind(this),
});
if (options.retryCached) {
this.pendingQueue.add(async () => this.queueAllCached());
}
// We always process our cache before any websocket message
this.pendingQueue.add(async () => this.queueAllCached());
}
static stringToArrayBuffer = (string: string): ArrayBuffer =>