使用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());
}
}
}
- 使用builder模式创建Websocket客户端
- 使用Builder模式代替来创建实例
- 创建模式:Builder模式
- 创建模式之Builder
- 创建型--builder模式
- Builder模式创建对象
- Builder生成器(创建型模式)
- 设计模式-创建型:Builder
- Builder生成器(创建型模式)
- 【创建型模式】builder(生成器)
- 创建对象之Builder模式
- Builder模式(创建类)
- 创建型模式-生成器(builder)
- 来说说<Builder>创建模式
- 创建型-建造模式(builder)
- 使用php创建WebSocket服务
- 使用php创建WebSocket服务
- (创建型模式)Builder 建造者模式
- rhce学习第十天
- 【leetcode】9. Palindrome Number
- eclipse报错
- Java UDP 组播实现
- 推测与验证
- 使用builder模式创建Websocket客户端
- javascript检测对象中是否存在某个属性判断方法小结
- Android ssl加密
- SQL查询下线关系
- rhce学习第十一天
- git合并分支步骤
- IOS-获取当前设备唯一码
- 浅谈HTTP中Get与Post的区别
- jquery获取select 选中的options