use of im.actor.core.api.rpc.RequestGetState in project actor-platform by actorapp.
the class SequenceActor method invalidate.
private void invalidate() {
if (!isValidated) {
return;
}
isValidated = false;
startWakeLock();
if (seq < 0) {
Log.d(TAG, "Loading fresh state...");
api(new RequestGetState(ApiSupportConfiguration.OPTIMIZATIONS)).then(response -> {
if (isValidated) {
return;
}
Log.d(TAG, "State loaded {seq=" + seq + "}");
seq = response.getSeq();
state = response.getState();
persistState(seq, state);
stopWakeLock();
onBecomeValid(response.getSeq(), response.getState());
});
} else {
Log.d(TAG, "Loading difference...");
onUpdateStarted();
final long loadStart = im.actor.runtime.Runtime.getCurrentTime();
api(new RequestGetDifference(seq, state, ApiSupportConfiguration.OPTIMIZATIONS)).then(response -> {
if (isValidated) {
return;
}
long parsingStart = Runtime.getCurrentTime();
ArrayList<Update> updates = new ArrayList<>();
for (ApiUpdateContainer container : response.getUpdates()) {
try {
updates.add(updatesParser.read(container.getUpdateHeader(), container.getUpdate()));
} catch (IOException e) {
e.printStackTrace();
// Ignore
}
}
Log.d(TAG, "Difference loaded {seq=" + response.getSeq() + "} in " + (Runtime.getCurrentTime() - loadStart) + " ms, " + "parsed in " + (Runtime.getCurrentTime() - parsingStart) + " ms, " + "userRefs: " + response.getUsersRefs().size() + ", " + "groupRefs: " + response.getGroupsRefs().size());
handler.onDifferenceUpdate(response.getUsers(), response.getGroups(), response.getUsersRefs(), response.getGroupsRefs(), updates).then(updateProcessed -> onUpdatesApplied(response.getSeq(), response.getState()));
onBecomeValid(response.getSeq(), response.getState());
if (response.needMore()) {
invalidate();
} else {
onUpdateEnded();
}
});
}
}
Aggregations