Author: yurize
Date: Sun Oct 21 17:43:30 2012
New Revision: 1400686
URL: http://svn.apache.org/viewvc?rev=1400686&view=rev
Log:
Makes webclient to use socketio when websocket does not connect. By
Vicente J. Ruiz Jurado.
https://reviews.apache.org/r/7602/
Modified:
incubator/wave/trunk/src/org/waveprotocol/box/webclient/client/WaveWebSocketClient.java
incubator/wave/trunk/src/org/waveprotocol/box/webclient/client/WebClient.java
Modified:
incubator/wave/trunk/src/org/waveprotocol/box/webclient/client/WaveWebSocketClient.java
URL:
http://svn.apache.org/viewvc/incubator/wave/trunk/src/org/waveprotocol/box/webclient/client/WaveWebSocketClient.java?rev=1400686&r1=1400685&r2=1400686&view=diff
==============================================================================
---
incubator/wave/trunk/src/org/waveprotocol/box/webclient/client/WaveWebSocketClient.java
(original)
+++
incubator/wave/trunk/src/org/waveprotocol/box/webclient/client/WaveWebSocketClient.java
Sun Oct 21 17:43:30 2012
@@ -49,6 +49,7 @@ import java.util.Queue;
* Wrapper around SocketIO that handles the FedOne client-server protocol.
*/
public class WaveWebSocketClient implements WaveSocket.WaveSocketCallback {
+ private static final int MAX_INITIAL_FAILURES = 2;
private static final Log LOG = Log.get(WaveWebSocketClient.class);
private static final int RECONNECT_TIME_MS = 5000;
private static final String JETTY_SESSION_TOKEN_NAME = "JSESSIONID";
@@ -88,7 +89,7 @@ public class WaveWebSocketClient impleme
}
}
- private final WaveSocket socket;
+ private WaveSocket socket;
private final IntMap<SubmitResponseCallback> submitRequestCallbacks;
/**
@@ -108,6 +109,12 @@ public class WaveWebSocketClient impleme
private final RepeatingCommand reconnectCommand = new RepeatingCommand() {
@Override
public boolean execute() {
+ if (!connectedAtLeastOnce && !websocketNotAvailable && connectTry >
MAX_INITIAL_FAILURES) {
+ // Let's try to use socketio, seems that websocket it's not working
+ // (we are under a proxy or similar)
+ socket = WaveSocketFactory.create(true, urlBase,
WaveWebSocketClient.this);
+ }
+ connectTry++;
if (connected == ConnectState.DISCONNECTED) {
LOG.info("Attemping to reconnect");
connected = ConnectState.CONNECTING;
@@ -116,10 +123,16 @@ public class WaveWebSocketClient impleme
return true;
}
};
-
- public WaveWebSocketClient(boolean useSocketIO, String urlBase) {
+ private final boolean websocketNotAvailable;
+ private boolean connectedAtLeastOnce = false;
+ private long connectTry = 0;
+ private final String urlBase;
+
+ public WaveWebSocketClient(boolean websocketNotAvailable, String urlBase) {
+ this.websocketNotAvailable = websocketNotAvailable;
+ this.urlBase = urlBase;
submitRequestCallbacks = CollectionUtils.createIntMap();
- socket = WaveSocketFactory.create(useSocketIO, urlBase, this);
+ socket = WaveSocketFactory.create(websocketNotAvailable, urlBase, this);
}
/**
@@ -144,6 +157,7 @@ public class WaveWebSocketClient impleme
@Override
public void onConnect() {
connected = ConnectState.CONNECTED;
+ connectedAtLeastOnce = true;
// Sends the session cookie to the server via an RPC to work around
browser bugs.
// See: http://code.google.com/p/wave-protocol/issues/detail?id=119
@@ -214,4 +228,5 @@ public class WaveWebSocketClient impleme
messages.add(message);
}
}
+
}
Modified:
incubator/wave/trunk/src/org/waveprotocol/box/webclient/client/WebClient.java
URL:
http://svn.apache.org/viewvc/incubator/wave/trunk/src/org/waveprotocol/box/webclient/client/WebClient.java?rev=1400686&r1=1400685&r2=1400686&view=diff
==============================================================================
---
incubator/wave/trunk/src/org/waveprotocol/box/webclient/client/WebClient.java
(original)
+++
incubator/wave/trunk/src/org/waveprotocol/box/webclient/client/WebClient.java
Sun Oct 21 17:43:30 2012
@@ -167,7 +167,7 @@ public class WebClient implements EntryP
HistorySupport.init(new HistoryProviderDefault());
HistoryChangeListener.init();
- websocket = new WaveWebSocketClient(useSocketIO(), getWebSocketBaseUrl());
+ websocket = new WaveWebSocketClient(websocketNotAvailable(),
getWebSocketBaseUrl());
websocket.connect();
if (Session.get().isLoggedIn()) {
@@ -274,7 +274,7 @@ public class WebClient implements EntryP
// XXX check formatting wrt GPE
private native String getWebSocketBaseUrl() /*-{return
((window.location.protocol == "https:") ? "wss" : "ws") + "://" +
$wnd.__websocket_address + "/";}-*/;
- private native boolean useSocketIO() /*-{ return !window.WebSocket }-*/;
+ private native boolean websocketNotAvailable() /*-{ return !window.WebSocket
}-*/;
/**
*/