瀏覽代碼

Fixing issue with Push stopping working in some circumstances (#11791)

* Fixing issue with Push stopping working in some circumstances

If new request is attempted when resynchronization is ongoing, the Push will stop working. This patch fixes the issue by aborting handleJson if resynch is already ongoing. 

This PR supercedes https://github.com/vaadin/framework/pull/11786

Fixes #11702, #7719

* Call onResynchronize() in MessageHandler

* Optimizing
tags/8.10.0.alpha1
Tatu Lund 4 年之前
父節點
當前提交
fd1a8df74a
沒有連結到貢獻者的電子郵件帳戶。

+ 16
- 2
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;
}
}

+ 1
- 0
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);

Loading…
取消
儲存