Веб-сокет Slack для обмена сообщениями в реальном времени

Пытаюсь реализовать это в приложении. Slack RTM После вызова rtm.start я получаю JSON-ответ и извлекаю URL-адрес wss. После этого, следуя документации, мне нужно открыть websocket. Пробовал две библиотеки

compile 'com.koushikdutta.async:androidasync:2.+'
compile 'org.java-websocket:Java-WebSocket:1.3.0'

Первый выдает TimeoutException, второй — входит в метод onClose с i = -1, b = true (onError или onOpen не вызываются, см. код ниже).

connection = (HttpURLConnection) new URL(getQuery(URL + "rtm.start",
                                new Pair<>("token", TOKEN))).openConnection();
final String response = readIs(connection.getInputStream());
JSONObject jResponse = new JSONObject(response); 
String uri = (String) jResponse.get("url"); 

С Java-WebSocket я пробовал этот код (стандартный из примера на github):

connectWebSocket(uri);

private void connectWebSocket(String uriStr) {
        URI uri;
        try {
            uri = new URI(uriStr);
        } catch (URISyntaxException e) {
            e.printStackTrace();
            return;
        }
        log(uri.toString());
        log(uri.toASCIIString());

        mWebSocketClient = new WebSocketClient(uri) {
            @Override
            public void onOpen(ServerHandshake serverHandshake) {
                log("Opened");
                mWebSocketClient.send("Hello from " + Build.MANUFACTURER + " " + Build.MODEL);
            }

            @Override
            public void onMessage(String s) {
                log(s);
            }

            @Override
            public void onClose(int i, String s, boolean b) {
                log("Closed " + s + " " + b + " number: " + i);
            }

            @Override
            public void onError(Exception e) {
                log("Error " + e.getMessage());
            }
        };
        mWebSocketClient.connect();
    }

Как я уже сказал выше - вызывается только onClose.

С AndroidAsync также пробовал стандартный код из примера:

AsyncHttpClient.getDefaultInstance().websocket(uri, "wss", (ex, webSocket) -> {
        if (ex != null) {
            log(ex.getMessage());
            return;
        }
        webSocket.send("a string");
});

Я никогда раньше не работал с веб-сокетами на Android и не могу понять, что я делаю неправильно. Будем признательны за вашу помощь.

URL-адрес в JSON имеет тип

wss://ms156.slack-msgs.com/websocket/LYBUMUtG-bqj9HkKwEB5Yk_DCyPeRbnZ4viUJYHzrzJnLr-M74d46IQ9khTF8rik-v6ckJ4hqXPRi666hyPR6pismYBZBsggJUade3LOARc=

person Yaroslav    schedule 15.07.2015    source источник
comment
есть результаты по этому @Yaroslav?   -  person sirvon    schedule 23.08.2015
comment
@sirvon да, я ответил   -  person Yaroslav    schedule 25.08.2015


Ответы (1)


Наконец моему коллеге удалось открыть этот сокет с помощью OkHttp. Если кому-то интересно - ниже приведен код тестового проекта: http://pastebin.com/3YhLjAn7 Что интересно - в итоге решили не использовать RTM, т.к. нагрузка на одно соединение слишком велика - вы получаете события со всех чатов и нет возможности установить фильтр только для одного конкретного.

person Yaroslav    schedule 24.08.2015