After Aphlict reconnects, ask the server to replay recent messages
Summary:
Fixes T12563. If we've ever seen an "open", mark all future connections as reconnects. When we reconnect, replay recent history.
(Until duplicate messages (T12564) are handled better this may cause some notification duplication.)
Also emit a reconnect event (for T12566) but don't use it yet.
Test Plan: {F4912044}
Reviewers: chad
Reviewed By: chad
Maniphest Tasks: T12563
Differential Revision: https://secure.phabricator.com/D17708
This commit is contained in:
@@ -16,10 +16,12 @@ JX.install('AphlictClientServer', {
|
||||
|
||||
this._server = server;
|
||||
this._lists = {};
|
||||
this._adminServers = [];
|
||||
},
|
||||
|
||||
properties: {
|
||||
logger: null,
|
||||
adminServers: null
|
||||
},
|
||||
|
||||
members: {
|
||||
@@ -33,6 +35,20 @@ JX.install('AphlictClientServer', {
|
||||
return this._lists[instance];
|
||||
},
|
||||
|
||||
getHistory: function(age) {
|
||||
var results = [];
|
||||
|
||||
var servers = this.getAdminServers();
|
||||
for (var ii = 0; ii < servers.length; ii++) {
|
||||
var messages = servers[ii].getHistory(age);
|
||||
for (var jj = 0; jj < messages.length; jj++) {
|
||||
results.push(messages[jj]);
|
||||
}
|
||||
}
|
||||
|
||||
return results;
|
||||
},
|
||||
|
||||
log: function() {
|
||||
var logger = this.getLogger();
|
||||
if (!logger) {
|
||||
@@ -117,6 +133,26 @@ JX.install('AphlictClientServer', {
|
||||
listener.unsubscribe(message.data);
|
||||
break;
|
||||
|
||||
case 'replay':
|
||||
var age = message.data.age || 60000;
|
||||
var min_age = (new Date().getTime() - age);
|
||||
|
||||
var old_messages = self.getHistory(min_age);
|
||||
for (var ii = 0; ii < old_messages.length; ii++) {
|
||||
var old_message = old_messages[ii];
|
||||
|
||||
if (!listener.isSubscribedToAny(old_message.subscribers)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
try {
|
||||
listener.writeMessage(old_message);
|
||||
} catch (error) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
log(
|
||||
'Unrecognized command "%s".',
|
||||
|
||||
Reference in New Issue
Block a user