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 
}-*/;
 
   /**
    */


Reply via email to