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());
}
}
}