android 中websocket使用

使用的依赖库

compile 'com.neovisionaries:nv-websocket-client:1.30'

public class WsClientTool implements WebSocketListener {
    private static WsClientTool singleton;

    private WebSocket ws;

    private static final String TAG = "WsClientTool";

    private List<WsMessageListener> listeners = new ArrayList<>();

    private String url;

    private String token;

    private WsClientTool() {

    }

    public static WsClientTool getSingleton() {
        if (singleton == null) {
            synchronized (RestfulTools.class) {
                if (singleton == null) {
                    singleton = new WsClientTool();
                }
            }
        }

        return singleton;
    }

    public void addMessageListener(WsMessageListener listener) {
        Log.i(TAG,"ws.addMessageListener()");
        if(null != listener && !listeners.contains(listener)) {
            listeners.add(listener);
        }
    }

    public void removeMessageListener(WsMessageListener listener) {
        if(null != listener) {
            listeners.remove(listener);
        }
    }

    public void connect(String serverUrl, String token) {
        url = serverUrl;
        this.token = token;
        try {
            if(null == ws) {
                ws = new WebSocketFactory().createSocket(serverUrl);
                ws.addHeader("opera-token", token);
                ws.setPingInterval(60 * 1000);
                ws.addListener(this);
                Log.i(TAG,"ws.connectAsynchronously() is null="+ws.toString());
            } else {
                ws = ws.recreate();
                Log.i(TAG,"ws.connectAsynchronously() is not null="+ws.toString());
            }
            ws.connectAsynchronously();

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

    public void reconnect() {
        if(null != ws && !ws.isOpen()) {
            ws.disconnect();
            ws = null;
            connect(url, token);
        }
    }

    public void disconnect() {
        if(null != ws) {
            ws.disconnect();
        }
    }

    public boolean isConnected() {
        return null != ws && ws.isOpen();
    }

    public void sendText(String content) {
        if(null != ws && ws.isOpen()) {
            Log.i(TAG,"wsclient sendText ="+content);
            ws.sendText(content);
        }
    }

    @Override
    public void onStateChanged(WebSocket websocket, WebSocketState newState) throws Exception {
        Log.i(TAG,"ws.onStateChanged newState="+newState.name());
    }

    @Override
    public void onConnected(WebSocket websocket, Map<String, List<String>> headers) throws Exception {
        Log.d(TAG, "connected");
        for (WsMessageListener listener: listeners) {
            listener.onConnected();
        }
    }

    @Override
    public void onConnectError(WebSocket websocket, WebSocketException cause) throws Exception {
        Log.d(TAG, "connect error");
        cause.printStackTrace();
    }

    @Override
    public void onDisconnected(WebSocket websocket, WebSocketFrame serverCloseFrame, WebSocketFrame clientCloseFrame, boolean closedByServer) throws Exception {
        Log.d(TAG, "disconnected");
        for (WsMessageListener listener: listeners) {
            listener.onDisconnected();
        }
    }

    @Override
    public void onFrame(WebSocket websocket, WebSocketFrame frame) throws Exception {
        Log.d(TAG, "onFrame: " + frame.toString());
    }

    @Override
    public void onContinuationFrame(WebSocket websocket, WebSocketFrame frame) throws Exception {

    }

    @Override
    public void onTextFrame(WebSocket websocket, WebSocketFrame frame) throws Exception {
        Log.d(TAG, "onTextFrame: " + frame.toString());
    }

    @Override
    public void onBinaryFrame(WebSocket websocket, WebSocketFrame frame) throws Exception {

    }

    @Override
    public void onCloseFrame(WebSocket websocket, WebSocketFrame frame) throws Exception {

    }

    @Override
    public void onPingFrame(WebSocket websocket, WebSocketFrame frame) throws Exception {

    }

    @Override
    public void onPongFrame(WebSocket websocket, WebSocketFrame frame) throws Exception {

    }

    @Override
    public void onTextMessage(WebSocket websocket, String text) throws Exception {
        Log.i(TAG, "onTextMessage: " + text);
        for (WsMessageListener listener: listeners) {
            listener.onTextMessage(text);
        }
    }

    @Override
    public void onBinaryMessage(WebSocket websocket, byte[] binary) throws Exception {

    }

    @Override
    public void onSendingFrame(WebSocket websocket, WebSocketFrame frame) throws Exception {
        Log.i(TAG, "onSendingFrame");
    }

    @Override
    public void onFrameSent(WebSocket websocket, WebSocketFrame frame) throws Exception {
        Log.i(TAG, "onFrameSent");
    }

    @Override
    public void onFrameUnsent(WebSocket websocket, WebSocketFrame frame) throws Exception {
        Log.i(TAG, "onFrameUnsent");
    }

    @Override
    public void onError(WebSocket websocket, WebSocketException cause) throws Exception {
        cause.printStackTrace();
        Log.i(TAG, "onError");
    }

    @Override
    public void onFrameError(WebSocket websocket, WebSocketException cause, WebSocketFrame frame) throws Exception {
        Log.i(TAG, "onFrameError");
    }

    @Override
    public void onMessageError(WebSocket websocket, WebSocketException cause, List<WebSocketFrame> frames) throws Exception {
        Log.i(TAG,"ws.onMessageError ");
    }

    @Override
    public void onMessageDecompressionError(WebSocket websocket, WebSocketException cause, byte[] compressed) throws Exception {
        cause.printStackTrace();
        Log.i(TAG,"ws.onMessageDecompressionError  ");
    }

    @Override
    public void onTextMessageError(WebSocket websocket, WebSocketException cause, byte[] data) throws Exception {
        Log.i(TAG,"ws.onTextMessageError ");
    }

    @Override
    public void onSendError(WebSocket websocket, WebSocketException cause, WebSocketFrame frame) throws Exception {
        Log.i(TAG,"ws.onSendError ");
    }

    @Override
    public void onUnexpectedError(WebSocket websocket, WebSocketException cause) throws Exception {
        cause.printStackTrace();
        Log.i(TAG,"ws.onUnexpectedError ");
    }

    @Override
    public void handleCallbackError(WebSocket websocket, Throwable cause) throws Exception {
        cause.printStackTrace();
        Log.i(TAG,"ws.handleCallbackError ");
    }

    @Override
    public void onSendingHandshake(WebSocket websocket, String requestLine, List<String[]> headers) throws Exception {

    }
}

主要就是发送数据和数据的接收。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值