]> source.dussan.org Git - vaadin-framework.git/commitdiff
Cherry pick PR #11791 from Vaadin 8 (#11798)
authorTatu Lund <tatu@vaadin.com>
Mon, 11 Nov 2019 13:49:21 +0000 (15:49 +0200)
committerAnna Koskinen <Ansku@users.noreply.github.com>
Mon, 11 Nov 2019 13:49:21 +0000 (15:49 +0200)
* Cherry pick PR #11791 from Vaadin 8

See: https://github.com/vaadin/framework/pull/11791

client/src/main/java/com/vaadin/client/communication/MessageHandler.java
client/src/main/java/com/vaadin/client/communication/MessageSender.java

index c4e7a0d297be0970db4e314d3dffa39432b9c542..a43cba7de1b1d14dd3e0f7f3618e7c85cc0b0c87 100644 (file)
@@ -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.
@@ -263,7 +264,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
@@ -326,7 +337,7 @@ public class MessageHandler {
             int serverNextExpected = json
                     .getInt(ApplicationConstants.CLIENT_TO_SERVER_ID);
             getMessageSender().setClientToServerMessageId(serverNextExpected,
-                    isResynchronize(json));
+                    hasResynchronize);
         }
 
         if (serverId != -1) {
@@ -1836,4 +1847,7 @@ public class MessageHandler {
         }
     }-*/;
 
+    public void onResynchronize() {
+        resyncInProgress = true;
+    }
 }
index b28efff85ee8e8793d2754177af58aac79248431..1c061eb59e8bbc6336312440b337ec7a3951329b 100644 (file)
@@ -358,6 +358,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);