观察Socket-IO消息

时间:2017-11-20 17:19:13

标签: android sockets observable rx-android rx-java2

我正在使用nkzawa套接字库在我的应用中实现聊天功能。我已使用套接字和端点(url字符串)向服务器发送消息。

我听说过关于RxJava和RxAndroid是观察数据流的最佳方式。

Observable.from(MyEndPoint).subscribe()

但我无法将url参数传递给observable。

是否可以创建一个observable来监听我的服务器端点上的新消息和现有消息。请问您如何以这种方式或其他方式检索套接字消息,谢谢。

按照建议编辑:

这是我在没有Rx但没有工作的情况下尝试过的代码片段:

private com.github.nkzawa.socketio.client.Socket mSocket;
{
    try {
        mSocket = IO.socket(Constants.PUBLIC_CHAT_ENDPOINT);
    } catch (URISyntaxException e) {
        e.printStackTrace();
    }
}

套接字如上所述初始化并连接到这里:

mSocket.connect();

我正在尝试在库文档中进行演示,但不能正常工作。

mSocket.on(Constants.SOCKET_GET_MESSAGE_EVENT, new Emitter.Listener() {
        @Override
        public void call(final Object... args) {
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    try {
                        JSONObject jsonObject = (JSONObject) args[0];
                        JSONObject dataObject = jsonObject.getJSONObject("data");

                        String type = dataObject.getString("type");
                        Log.d(TAG, "Message is of type:\t" + type);

                        JSONObject contentObject = dataObject.getJSONObject("content");
                        String roomId = contentObject.getString("roomid");
                        String userId = contentObject.getString("userId");
                        String message = contentObject.getString("message");

                        Log.d(TAG, "Get Message is:\t" + message);
                        Log.d(TAG, "roomId:\t" + roomId);
                        Log.d(TAG, "Get userId is:\t" + userId);


                        TingTingUser otherUsers = new TingTingUser(userId, "Abhiram Labhani", "Unknown");
                        HomeMessage othersHomeMessages = new HomeMessage(message, otherUsers, System.currentTimeMillis());

                        List<HomeMessage> othersList = new ArrayList<>();
                        othersList.add(othersHomeMessages);

                        Log.d(TAG, "Other Messages size is:\t " + othersList.size());


                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            });
        }
    });

我想使用RxJava实现上述代码,但不知道如何从动态的,不断更新的端点观察数据,因为大多数文档和文章仅使用预定义的数据。感谢。

0 个答案:

没有答案