Quellcode durchsuchen

Use Transport.WEBSOCKET_XHR instead of setter for mixing websockets and XHR (#11733)

Change-Id: I2fad7d367d8a4ba476ae0705672ebc2ee7cfeb1c
tags/7.6.0.alpha5
Artur Signell vor 8 Jahren
Ursprung
Commit
9aafe4d1c5

+ 9
- 3
client/src/com/vaadin/client/communication/ServerCommunicationHandler.java Datei anzeigen

@@ -328,11 +328,17 @@ public class ServerCommunicationHandler {
* @return A string representation of the current transport type
*/
public String getCommunicationMethodName() {
String clientToServer = "XHR";
String serverToClient = "-";
if (push != null) {
return "Push (" + push.getTransportType() + ")";
} else {
return "XHR";
serverToClient = push.getTransportType();
if (push.isBidirectional()) {
clientToServer = serverToClient;
}
}

return "Client to server: " + clientToServer + ", "
+ "server to client: " + serverToClient;
}

private CommunicationProblemHandler getCommunicationProblemHandler() {

+ 21
- 40
server/src/com/vaadin/ui/PushConfiguration.java Datei anzeigen

@@ -139,33 +139,6 @@ public interface PushConfiguration extends Serializable {
*/
public void setParameter(String parameter, String value);

/**
* Sets whether to force the use of XHR when sending data from the client to
* the server.
*
* This settings currently only has effect when using websockets, which by
* default send client to server requests through the websockets channel. If
* you need to support cookies, HTTP auth or similar features not available
* in websockets communication you can set this to true.
*
* @since 7.6
* @param alwaysUseXhrForServerRequests
* true to always use XHR for server requests, false otherwise
*/
public void setAlwaysUseXhrForServerRequests(
boolean alwaysUseXhrForServerRequests);

/**
* Checks whether to force the use of XHR when sending data from the client
* to the server.
*
* @see #setAlwaysUseXhrForServerRequests(boolean)
*
* @since 7.6
* @return true to always use XHR for server requests, false otherwise
*/
public boolean isAlwaysUseXhrForServerRequests();

}

class PushConfigurationImpl implements PushConfiguration {
@@ -234,8 +207,14 @@ class PushConfigurationImpl implements PushConfiguration {
@Override
public Transport getTransport() {
try {
return Transport
Transport tr = Transport
.getByIdentifier(getParameter(PushConfigurationState.TRANSPORT_PARAM));
if (tr == Transport.WEBSOCKET
&& getState(false).alwaysUseXhrForServerRequests) {
return Transport.WEBSOCKET_XHR;
} else {
return tr;
}
} catch (IllegalArgumentException e) {
return null;
}
@@ -250,8 +229,16 @@ class PushConfigurationImpl implements PushConfiguration {
*/
@Override
public void setTransport(Transport transport) {
setParameter(PushConfigurationState.TRANSPORT_PARAM,
transport.getIdentifier());
if (transport == Transport.WEBSOCKET_XHR) {
getState().alwaysUseXhrForServerRequests = true;
// Atmosphere knows only about "websocket"
setParameter(PushConfigurationState.TRANSPORT_PARAM,
Transport.WEBSOCKET.getIdentifier());
} else {
getState().alwaysUseXhrForServerRequests = false;
setParameter(PushConfigurationState.TRANSPORT_PARAM,
transport.getIdentifier());
}
}

/*
@@ -278,6 +265,10 @@ class PushConfigurationImpl implements PushConfiguration {
*/
@Override
public void setFallbackTransport(Transport fallbackTransport) {
if (fallbackTransport == Transport.WEBSOCKET_XHR) {
throw new IllegalArgumentException(
"WEBSOCKET_XHR can only be used as primary transport");
}
setParameter(PushConfigurationState.FALLBACK_TRANSPORT_PARAM,
fallbackTransport.getIdentifier());
}
@@ -318,14 +309,4 @@ class PushConfigurationImpl implements PushConfiguration {
.keySet());
}

@Override
public void setAlwaysUseXhrForServerRequests(
boolean alwaysUseXhrForServerRequests) {
getState().alwaysUseXhrForServerRequests = alwaysUseXhrForServerRequests;
}

@Override
public boolean isAlwaysUseXhrForServerRequests() {
return getState(false).alwaysUseXhrForServerRequests;
}
}

+ 6
- 0
server/tests/src/com/vaadin/ui/PushConfigurationTransportTest.java Datei anzeigen

@@ -40,6 +40,12 @@ public class PushConfigurationTransportTest {
ui.getPushConfiguration().setTransport(transport);
Assert.assertEquals(ui.getPushConfiguration().getTransport(),
transport);

if (transport == Transport.WEBSOCKET_XHR) {
Assert.assertTrue(ui.getState().pushConfiguration.alwaysUseXhrForServerRequests);
} else {
Assert.assertFalse(ui.getState().pushConfiguration.alwaysUseXhrForServerRequests);
}
}

}

+ 6
- 0
shared/src/com/vaadin/shared/ui/ui/Transport.java Datei anzeigen

@@ -27,6 +27,12 @@ public enum Transport {
* Websockets
*/
WEBSOCKET("websocket"),
/**
* Websockets for server to client, XHR for client to server
*
* @since 7.6
*/
WEBSOCKET_XHR("websocket-xhr"),
/**
* HTTP streaming
*

+ 1
- 2
uitest/src/com/vaadin/tests/components/AbstractTestUI.java Datei anzeigen

@@ -125,8 +125,7 @@ public abstract class AbstractTestUI extends UI {
} else if ("websocket".equals(transport)) {
enablePush(Transport.WEBSOCKET);
} else if ("websocket-xhr".equals(transport)) {
enablePush(Transport.WEBSOCKET);
getPushConfiguration().setAlwaysUseXhrForServerRequests(true);
enablePush(Transport.WEBSOCKET_XHR);
} else if ("streaming".equals(transport)) {
enablePush(Transport.STREAMING);
} else if ("long-polling".equals(transport)) {

+ 1
- 2
uitest/src/com/vaadin/tests/push/BasicPushWebsocketXhr.java Datei anzeigen

@@ -20,7 +20,7 @@ import com.vaadin.server.VaadinRequest;
import com.vaadin.shared.ui.ui.Transport;
import com.vaadin.shared.ui.ui.UIState.PushConfigurationState;

@Push(transport = Transport.WEBSOCKET)
@Push(transport = Transport.WEBSOCKET_XHR)
public class BasicPushWebsocketXhr extends BasicPush {

@Override
@@ -29,7 +29,6 @@ public class BasicPushWebsocketXhr extends BasicPush {
// Don't use fallback so we can easier detect if websocket fails
getPushConfiguration().setParameter(
PushConfigurationState.FALLBACK_TRANSPORT_PARAM, "none");
getPushConfiguration().setAlwaysUseXhrForServerRequests(true);
}

}

Laden…
Abbrechen
Speichern