0

I am trying to implement connection failover in android application. Basically I have list of URLs which application connect using websocket, In case of unable to connect with any url I need to try a second connection. API which I am using to connect with websocket in android side is not synchronous. so when I start connect to websocket after executing this method I dont know either connection establish or not until OnOpen method called and then I set some boolean there to use further.

What I tried: One solution in my mind is to start to call connect method from a thread and sleep this for certain time if OnOpen method called within timespan is ok otherwise try to use second connection url.

Can someone give me hint how I can resolve this. Here is a sample code (without thread implementation):

 private DataUploader() {

    // test list of url
    urlList = new ArrayList<String>();
    urlList.add("192.168.220.197:9001/observation/");
    urlList.add("192.168.220.197:9002/observation/");
    urlList.add("echo.websocket.org");

    connectWebSocket();
 }

public void connectWebSocket() {

    if (urlList.size() > -1) {
        String url = urlList.get(index);
        this.connect(url);
        index++;

    }
}



private void connect(String websocketEndPointUrl) {
    URI uri;
    try {
        websocketEndPointUrl = "ws://" + websocketEndPointUrl;
        uri = new URI(websocketEndPointUrl);
    } catch (URISyntaxException e) {
        e.printStackTrace();
        return;
    }

    mWebSocketClient = new WebSocketClient(uri) {
        @Override
        public void onOpen(ServerHandshake serverHandshake) {
            Log.i("Websocket", "Opened");
             isReady = true;
        }

        @Override
        public void onMessage(String s) {
           ///

        }

        @Override
        public void onClose(int i, String s, boolean b) {
            Log.i("Websocket", "Closed " + s);
        }

        @Override
        public void onError(Exception e) {
            Log.i("Websocket", "Error " + e.getMessage());
        }
    };

    mWebSocketClient.connect();

}
walkmn
  • 2,322
  • 22
  • 29

0 Answers0