android 中websocket使用

来源:互联网 发布:wampserver mac版下载 编辑:程序博客网 时间:2024/05/24 02:37

使用的依赖库

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

public class WsClientToolimplements WebSocketListener {
    private static WsClientToolsingleton;

    private WebSocket ws;

    private static final StringTAG = "WsClientTool";

    private List<WsMessageListener>listeners = newArrayList<>();

    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 voidonStateChanged(WebSocket websocket, WebSocketState newState) throws Exception {
        Log.i(TAG,"ws.onStateChanged newState="+newState.name());
    }

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

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

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

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

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

    }

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

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

    }

    @Override
    public voidonCloseFrame(WebSocket websocket, WebSocketFrame frame) throwsException {

    }

    @Override
    public voidonPingFrame(WebSocket websocket, WebSocketFrame frame) throwsException {

    }

    @Override
    public voidonPongFrame(WebSocket websocket, WebSocketFrame frame) throwsException {

    }

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

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

    }

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

    @Override
    public voidonFrameSent(WebSocket websocket, WebSocketFrame frame) throwsException {
        Log.i(TAG,"onFrameSent");
    }

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

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

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

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

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

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

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

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

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

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

    }
}

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