Be paranoid on /sync processing
This commit is contained in:
+27
-18
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user