public abstract class MyWebSocketService extends Service implementsIWebSocket {private static final String TAG = MyWebSocketService.class.getSimpleName();private ServiceBinder binder = newServiceBinder();private int connectStatus = 0;privateWebSocketThread webSocketThread;privateWebSocketClient client;
@Nullable
@OverridepublicIBinder onBind(Intent intent) {
Log.i(TAG,"onBind: ");if (binder == null){
binder= newMyWebSocketService.ServiceBinder();
}returnbinder;
}public class ServiceBinder extendsBinder {publicMyWebSocketService getService() {return MyWebSocketService.this;
}
}
@Overridepublic voidonCreate() {super.onCreate();
Log.i(TAG,"onCreate: ");//连接
webSocketThread = newMyWebSocketService.WebSocketThread();
webSocketThread.start();
}private class WebSocketThread extendsThread {
@Overridepublic voidrun() {
Log.i(TAG,"run: ");
setupWebSocket();
}
}protected voidsetupWebSocket(){
Log.i(TAG,"setupWebSocket: ");if (connectStatus != 0) return;
connectStatus= 1;try{
client= new WebSocketClient(URI.create(getConnectUrl()), newDraft_10()) {
@Overridepublic voidonOpen(ServerHandshake handshakedata) {
connectStatus= 2;
}
@Overridepublic voidonMessage(String message) {
Log.i(TAG,"onMessage: " +message);//消息分发
dispatchResponse(message);
}
@Overridepublic void onClose(int code, String reason, booleanremote) {
Log.e(TAG,"onClose: " + code +reason);
connectStatus= 0;//EventBus 通知
}
@Overridepublic voidonError(Exception ex) {
Log.e(TAG,"onError: " +ex.getMessage());
connectStatus= 0;//EventBus 通知
}
};
client.connect();
}catch(Exception e){
e.printStackTrace();
}
}
@Overridepublic voidonDestroy() {super.onDestroy();
Log.i(TAG,"onDestroy: ");
}
@Overridepublic voidsendText(String text) {
Log.i(TAG,"sendText From Four Activity : " +text);if (TextUtils.isEmpty(text)) return;if (client != null && connectStatus == 2){
client.send(text);
}
}
@Overridepublic intgetConnectStatus() {returnconnectStatus;
}
@Overridepublic voidreconnect() {
Log.i(TAG,"reconnect: ");new Thread(newRunnable() {
@Overridepublic voidrun() {try{
Thread.sleep(200);
}catch(InterruptedException e) {
e.printStackTrace();
}if (webSocketThread != null &&webSocketThread.isAlive()){
connectStatus= 0;
webSocketThread= newWebSocketThread();
webSocketThread.start();
}else{
Log.e(TAG,"run: reconnect action is Failed ");
}
}
}).start();
}
@Overridepublic voidstop() {
Log.i(TAG,"stop: ");
client.close();
connectStatus= 0;
}/*** 获取服务器地址
*@return
*/
protected abstractString getConnectUrl();/*** 分发响应数据*/
protected abstract voiddispatchResponse(String textResponse);
}