android io.socket如何拦截所有监听事件实现和服务器端anything一样的事件

  • 重写OkHttpClient
 class MyOkHttpClient extends OkHttpClient {

        @Override
        public WebSocket newWebSocket(Request request, final WebSocketListener listener) {

            WebSocketListener webSocketListener = new WebSocketListener() {

                public void onOpen(WebSocket webSocket, Response response) {
                    listener.onOpen(webSocket, response);
                }

                public void onMessage(WebSocket webSocket, String text) {
                    int index = text.indexOf("[\"transinfo");
                    if (!TextUtils.isEmpty(text) && index < 10 && index > 0) {
                        try {
                            String be = text.substring(0, text.indexOf("["));
                            String af = text.substring(text.indexOf("["));
                            String bb = be + "[\"test\",{\"data\":[" + af + "]}]";
                            listener.onMessage(webSocket, bb);
                        } catch (Exception e) {
                            e.printStackTrace();
                        }


                    } else {
                        listener.onMessage(webSocket, text);
                    }


                }

                public void onMessage(WebSocket webSocket, ByteString bytes) {
                    listener.onMessage(webSocket, bytes);
                    Log.d("TTTT", "onMessage bytes==>" + bytes.toString());

                }


                public void onClosing(WebSocket webSocket, int code, String reason) {
                    listener.onClosing(webSocket, code, reason);
                }


                public void onClosed(WebSocket webSocket, int code, String reason) {
                    listener.onClosed(webSocket, code, reason);
                }


                public void onFailure(WebSocket webSocket, Throwable t, @Nullable Response response) {
                    listener.onFailure(webSocket, t, response);
                }
            };
            RealWebSocket webSocket = new RealWebSocket(request, webSocketListener, new Random(), pingIntervalMillis());
            webSocket.connect(this);
            return webSocket;
        }
    }
这里将所有以transinfo开头的事件全部转化为test事件。
  • 配置 io.socket的webSocketFactory
      IO.Options opts = new IO.Options();
//        OkHttpClient webSocketFactory = new OkHttpClient.Builder()
//                .proxy(Proxy.NO_PROXY)
//                .build();
//        OkHttpClient callFactory = new OkHttpClient.Builder()
//                .proxy(Proxy.NO_PROXY)
//                .build();
//        opts.webSocketFactory = webSocketFactory;
//        opts.callFactory = callFactory;
        //失败重试次数
//        opts.reconnectionAttempts = 10;
        //失败重连的时间间隔
//        opts.reconnectionDelay = 1000;
        //连接超时时间(ms)
//        opts.timeout = 500;

        MyOkHttpClient aa = new MyOkHttpClient();
        aa.newBuilder().proxy(Proxy.NO_PROXY);
        opts.webSocketFactory = aa;
        opts.query = query;
//        opts.forceNew = true;
        opts.transports = new String[]{"websocket"};
        mSocket = IO.socket(url, opts);
        mSocket.off();
        listenSignalEvents();
        mSocket.connect();
  • 设置监听
    mSocket.on("test", new Socket.Listener() {
            @Override
            public void call(Object... args) {

                LogUtil.e("aaaaaaa");
                LogUtil.e(args[0].toString());
            }
        });

  • 接收服务器端数据

在这里插入图片描述

发布了316 篇原创文章 · 获赞 660 · 访问量 122万+

猜你喜欢

转载自blog.csdn.net/huangxiaoguo1/article/details/105088093