Browse Source

Determine Push transport before re-connect (#11884)

onConnect was allways called with websocket = false. I think this is wrong, since if there was connection loss in websocket, now connection cannot be re-established in websocket mode.

Fixes: https://github.com/vaadin/framework/issues/11299

This bug may have been manifesting in other ways as well

Recently similar fix was done in Flow as well, see: https://github.com/vaadin/flow/pull/7489
tags/8.11.0.alpha1
Tatu Lund 4 years ago
parent
commit
368f350c98
No account linked to committer's email address

+ 6
- 9
server/src/main/java/com/vaadin/server/communication/PushHandler.java View File

@@ -198,18 +198,16 @@ public class PushHandler {
* the atmosphere resource for the current request
* @param callback
* the push callback to call when a UI is found and locked
* @param websocket
* true if this is a websocket message (as opposed to a HTTP
* request)
*/
private void callWithUi(final AtmosphereResource resource,
final PushEventCallback callback, boolean websocket) {
final PushEventCallback callback) {
AtmosphereRequest req = resource.getRequest();
VaadinServletRequest vaadinRequest = new VaadinServletRequest(req,
service);
VaadinSession session = null;

if (websocket) {
boolean isWebsocket = resource.transport() == TRANSPORT.WEBSOCKET;
if (isWebsocket) {
// For any HTTP request we have already started the request in the
// servlet
service.requestStart(vaadinRequest, null);
@@ -281,7 +279,7 @@ public class PushHandler {
}
} finally {
try {
if (websocket) {
if (isWebsocket) {
service.requestEnd(vaadinRequest, null, session);
}
} catch (Exception e) {
@@ -520,7 +518,7 @@ public class PushHandler {
* The related atmosphere resources
*/
void onConnect(AtmosphereResource resource) {
callWithUi(resource, establishCallback, false);
callWithUi(resource, establishCallback);
}

/**
@@ -531,8 +529,7 @@ public class PushHandler {
* The related atmosphere resources
*/
void onMessage(AtmosphereResource resource) {
callWithUi(resource, receiveCallback,
resource.transport() == TRANSPORT.WEBSOCKET);
callWithUi(resource, receiveCallback);
}

/**

Loading…
Cancel
Save