使用builder模式创建Websocket客户端

来源:互联网 发布:认定报名保存数据失败 编辑:程序博客网 时间:2024/05/22 00:53

1 构建类

public final class WebsocketClient {


    public static WebsocketClient instance = new WebsocketClient();
    public static final String TAG = "MyWebsocketClient";
    public static final String WEBSOCKET_MESSAGE = "message";
    public static final int WEBSOCKET_CODE = 10086;

    private HandWebSocket webSocket;
    private WebsocketConfig config;
    private IntentFilter filter;
    private ActionReceiver receiver;

    public static WebsocketClient getInstance() {
        return instance;
    }

    private WebsocketClient() {
    }

    public WebsocketClient config(WebsocketConfig config) {
        this.config = config;

        // 注册监听广播
        receiver = new ActionReceiver();
        filter = new IntentFilter(ActionReceiver.ACTION);
        config.mContext.registerReceiver(receiver, filter);

        return this;
    }

    public void connect() throws URISyntaxException, InterruptedException {

        // HandWebSocket websocket = new HandWebSocket(new URI(config.url),
        // new Draft_17(), config.params, 5 * 1000);
        webSocket = new HandWebSocket(new URI(config.url));
        webSocket.connectBlocking();
    }

    public class HandWebSocket extends WebSocketClient {
        public HandWebSocket(URI serverUri) {
            super(serverUri);
        }

        public HandWebSocket(URI serverUri, Draft draft) {
            super(serverUri, draft);
        }

        public HandWebSocket(URI serverUri, Draft protocolDraft,
                Map<String, String> httpHeaders, int connectTimeout) {
            super(serverUri, protocolDraft, httpHeaders, connectTimeout);
        }

        @Override
        public void onOpen(ServerHandshake handShakeData) {

            webSocket.send(config.message == null ? "Test!" : config.message);
            Logg.i(TAG, "onOpen-status:" + handShakeData.getHttpStatus());
            Logg.i(TAG, "onOpen-msg:" + handShakeData.getHttpStatusMessage());
        }

        @Override
        public void onMessage(String message) {
            Logg.i(TAG, "onMessage:" + message);

            Intent intent = new Intent(ActionReceiver.ACTION);
            intent.putExtra(WEBSOCKET_MESSAGE, message);
            config.mContext.sendBroadcast(intent);
        }

        @Override
        public void onError(Exception e) {
            Logg.i(TAG, "onError:" + e.getMessage());

            // Intent intent = new Intent(ActionReceiver.ERROR);
            // intent.putExtra(WEBSOCKET_MESSAGE, "server error!");
            // config.mContext.sendBroadcast(intent);
        }

        @Override
        public void onClose(int code, String reason, boolean remote) {
            Logg.i(TAG, "onError:" + "code--" + code + ",reason--" + reason
                    + ",remote--" + remote);

            config.mContext.unregisterReceiver(receiver);
        }
    }
}


2 配置类

public class WebsocketConfig {

    public Context mContext;
    public String url;
    public Map<String, String> params;
    public String message;

    private WebsocketConfig() {
    }

    public static class Builder {

        private Context mContext;
        private String url;
        private Map<String, String> params;
        private String message;

        public Builder(Context context) {
            this.mContext = context;
        }

        public Builder setUrl(String url) {
            this.url = url;
            return this;
        }

        public Builder setParams(Map<String, String> params) {
            this.params = params;
            return this;
        }

        public Builder setMessage(String message) {
            this.message = message;
            return this;
        }

        public WebsocketConfig build() {
            WebsocketConfig config = new WebsocketConfig();
            config.mContext = this.mContext;
            config.url = this.url;
            config.params = this.params;
            config.message = this.message;
            return config;
        }
    }
}

3 调用类

public final class WebSocketRegisterTool {

    public static void registerWebSocket(Context context, String url) {
        WebsocketConfig config = new WebsocketConfig.Builder(context)
                .setUrl(url).setParams(null).setMessage("Test!").build();
        try {
            WebsocketClient.getInstance().config(config).connect();
        } catch (URISyntaxException | InterruptedException e) {
            e.printStackTrace();
            Logg.i("WebSocket", "onError:" + e.getMessage());
        }
    }
}

1 0
原创粉丝点击