Be paranoid on /sync processing

This commit is contained in:
Kegan Dougal
2015-12-09 16:41:36 +00:00
parent 243bdd78f4
commit 3d57b4ce6a
+27 -18
View File
@@ -175,20 +175,30 @@ SyncApi.prototype._sync = function(syncOptions, attempt) {
// }
console.log("Got data %s", data);
// handle presence events (User objects)
if (data.presence && utils.isArray(data.presence.events)) {
data.presence.events.map(client.getEventMapper()).forEach(function(presenceEvent) {
var user = client.store.getUser(presenceEvent.getSender());
if (user) {
user.setPresenceEvent(presenceEvent);
}
else {
user = createNewUser(client, presenceEvent.getSender());
user.setPresenceEvent(presenceEvent);
client.store.storeUser(user);
}
client.emit("event", presenceEvent);
});
// set the sync token NOW *before* processing the events. We do this so if something
// barfs on an event we can skip it rather than constantly polling with the same token.
client.store.setSyncToken(data.next_batch);
try {
// handle presence events (User objects)
if (data.presence && utils.isArray(data.presence.events)) {
data.presence.events.map(client.getEventMapper()).forEach(function(presenceEvent) {
var user = client.store.getUser(presenceEvent.getSender());
if (user) {
user.setPresenceEvent(presenceEvent);
}
else {
user = createNewUser(client, presenceEvent.getSender());
user.setPresenceEvent(presenceEvent);
client.store.storeUser(user);
}
client.emit("event", presenceEvent);
});
}
}
catch (e) {
console.error("Caught /sync error:");
console.error(e);
}
/*
@@ -292,11 +302,10 @@ SyncApi.prototype._sync = function(syncOptions, attempt) {
});
}
*/
// assume success until we fail which may be 30+ secs */
client.store.setSyncToken(data.next_batch);
// emit synced events
if (!syncOptions.hasSyncedBefore) {
updateSyncState(client, "PREPARED");
syncOptions.hasSyncedBefore = true;