aboutsummaryrefslogtreecommitdiffstats
path: root/client
diff options
context:
space:
mode:
Diffstat (limited to 'client')
-rw-r--r--client/src/main/java/com/vaadin/client/communication/MessageHandler.java18
-rw-r--r--client/src/main/java/com/vaadin/client/communication/MessageSender.java1
2 files changed, 17 insertions, 2 deletions
diff --git a/client/src/main/java/com/vaadin/client/communication/MessageHandler.java b/client/src/main/java/com/vaadin/client/communication/MessageHandler.java
index a622bf1614..8e16293423 100644
--- a/client/src/main/java/com/vaadin/client/communication/MessageHandler.java
+++ b/client/src/main/java/com/vaadin/client/communication/MessageHandler.java
@@ -193,6 +193,7 @@ public class MessageHandler {
private int lastSeenServerSyncId = UNDEFINED_SYNC_ID;
private ApplicationConnection connection;
+ private boolean resyncInProgress;
/**
* Data structure holding information about pending UIDL messages.
@@ -258,7 +259,17 @@ public class MessageHandler {
protected void handleJSON(final ValueMap json) {
final int serverId = getServerId(json);
- if (isResynchronize(json) && !isNextExpectedMessage(serverId)) {
+ boolean hasResynchronize = isResynchronize(json);
+
+ if (!hasResynchronize && resyncInProgress) {
+ Logger.getLogger(MessageHandler.class.getName())
+ .warning("Dropping the response of a request before a resync request.");
+ return;
+ }
+
+ resyncInProgress = false;
+
+ if (hasResynchronize && !isNextExpectedMessage(serverId)) {
// Resynchronize request. We must remove any old pending
// messages and ensure this is handled next. Otherwise we
// would keep waiting for an older message forever (if this
@@ -321,7 +332,7 @@ public class MessageHandler {
int serverNextExpected = json
.getInt(ApplicationConstants.CLIENT_TO_SERVER_ID);
getMessageSender().setClientToServerMessageId(serverNextExpected,
- isResynchronize(json));
+ hasResynchronize);
}
if (serverId != -1) {
@@ -1822,4 +1833,7 @@ public class MessageHandler {
}
}-*/;
+ public void onResynchronize() {
+ resyncInProgress = true;
+ }
}
diff --git a/client/src/main/java/com/vaadin/client/communication/MessageSender.java b/client/src/main/java/com/vaadin/client/communication/MessageSender.java
index 5864ee5ee7..cde6657d1a 100644
--- a/client/src/main/java/com/vaadin/client/communication/MessageSender.java
+++ b/client/src/main/java/com/vaadin/client/communication/MessageSender.java
@@ -349,6 +349,7 @@ public class MessageSender {
* state from the server
*/
public void resynchronize() {
+ getMessageHandler().onResynchronize();
getLogger().info("Resynchronizing from server");
JsonObject resyncParam = Json.createObject();
resyncParam.put(ApplicationConstants.RESYNCHRONIZE_ID, true);