package com.ripple.client.transport.impl;
import com.ripple.client.transport.TransportEventHandler;
import com.ripple.client.transport.WebSocketTransport;
import java.lang.ref.WeakReference;
import org.java_websocket.client.WebSocketClient;
import org.java_websocket.drafts.Draft_17;
import org.java_websocket.handshake.ServerHandshake;
import org.json.JSONException;
import org.json.JSONObject;
import java.net.Proxy;
import java.net.URI;
class WS extends WebSocketClient {
WeakReference<TransportEventHandler> h;
public WS(URI serverURI) {
super(serverURI, new Draft_17(), null, 10000);
}
public void setProxy(Proxy proxy) {
super.setProxy(proxy);
}
public void muteEventHandler() {
h.clear();
}
public void setEventHandler(TransportEventHandler eventHandler) {
h = new WeakReference<TransportEventHandler>(eventHandler);
}
@Override
public void onOpen(ServerHandshake handshakedata) {
TransportEventHandler handler = h.get();
if (handler != null) {
handler.onConnected();
}
}
@Override
public void onMessage(String message) {
try {
TransportEventHandler handler = h.get();
if (handler != null) {
handler.onMessage(new JSONObject(message));
}
} catch (JSONException e) {
throw new RuntimeException(e);
}
}
@Override
public void onClose(int code, String reason, boolean remote) {
TransportEventHandler handler = h.get();
if (handler != null) {
handler.onDisconnected(false);
}
}
@Override
public void onError(Exception ex) {
TransportEventHandler handler = h.get();
if (handler != null) {
handler.onError(ex);
}
}
}
public class JavaWebSocketTransportImpl implements WebSocketTransport {
WeakReference<TransportEventHandler> handler;
WS client = null;
public void setProxy(Proxy proxy) {
if (client != null) {
client.setProxy(proxy);
}
}
@Override
public void setHandler(TransportEventHandler events) {
handler = new WeakReference<TransportEventHandler>(events);
if (client != null) {
client.setEventHandler(events);
}
}
@Override
public void sendMessage(JSONObject msg) {
client.send(msg.toString());
}
@Override
public void connect(URI uri) {
TransportEventHandler curHandler = handler.get();
if (curHandler == null) {
throw new RuntimeException(
"must call setEventHandler() before connect(...)");
}
disconnect();
client = new WS(uri);
client.setEventHandler(curHandler);
curHandler.onConnecting(1);
client.connect();
}
@Override
public void disconnect() {
if (client != null) {
client.muteEventHandler();
client = null;
}
}
}