/** * Copyright 2010 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ package org.waveprotocol.box.webclient.client; import com.google.gwt.websockets.client.WebSocket; import com.google.gwt.websockets.client.WebSocketCallback; import com.glines.socketio.client.common.SocketIOConnection; import com.glines.socketio.client.gwt.GWTSocketIOConnectionFactory; import com.glines.socketio.common.DisconnectReason; import com.glines.socketio.common.SocketIOException; /** * Factory to create proxy wrappers around either {@link com.google.gwt.websockets.client.WebSocket} * or {@link com.glines.socketio.client.SocketIOConnection}. * * @author tad.glines@gmail.com (Tad Glines) */ public class WaveSocketFactory { /** * Create a WaveSocket instance that wraps a concrete socket implementation. * If useSocketIO is true an instance of {@link com.glines.socketio.client.SocketIOConnection} * is wrapped, otherwise an instance of {@link com.google.gwt.websockets.client.WebSocket} is * wrapped. */ public static WaveSocket create(boolean useSocketIO, final String urlBase, final WaveSocket.WaveSocketCallback callback) { if (useSocketIO) { return new WaveSocket() { /* * TODO: The urlBase is ignored for now. The default is identical to what is currently * provided in urlBase. When the GWTSocketIOConnectionFactory.create() is updated, * parse the urlBAse and pass the host and port. */ private final SocketIOConnection socket = GWTSocketIOConnectionFactory.INSTANCE.create( new SocketIOConnection.SocketIOConnectionListener() { @Override public void onConnect() { callback.onConnect(); } @Override public void onDisconnect(DisconnectReason reason, String errorMEssage) { callback.onDisconnect(); } @Override public void onMessage(int messageType, String message) { callback.onMessage(message); } }, null, (short)0); @Override public void connect() { socket.connect(); } @Override public void disconnect() { socket.disconnect(); } @Override public void sendMessage(String message) { try { socket.sendMessage(message); } catch (SocketIOException e) { // Ignore because the GWT implementation doesn't throw this Exception. } } }; } else { return new WaveSocket() { final WebSocket socket = new WebSocket(new WebSocketCallback() { @Override public void onConnect() { callback.onConnect(); } @Override public void onDisconnect() { callback.onDisconnect(); } @Override public void onMessage(String message) { callback.onMessage(message); } }); @Override public void connect() { socket.connect(urlBase + "socket"); } @Override public void disconnect() { socket.close(); } @Override public void sendMessage(String message) { socket.send(message); } }; } } }