尝试传 DisConnect By Server事件到KeepAalive,让其判断是否需要重新尝试连接服务器。
authorsnicker <snickersun@163.com>
Tue, 7 Apr 2020 02:15:15 +0000 (10:15 +0800)
committersnicker <snickersun@163.com>
Tue, 7 Apr 2020 02:15:15 +0000 (10:15 +0800)
尝试解决 非法IMEI造成重连次数过多,非常耗电的问题。

app/src/main/java/com/enqualcomm/support/CoreService.java
app/src/main/java/com/enqualcomm/support/service/CheckSIM.java
app/src/main/java/com/enqualcomm/support/service/Deliver.java
app/src/main/java/com/enqualcomm/support/service/Initialize.java
app/src/main/java/com/enqualcomm/support/service/KeepAlive.java
app/src/main/java/com/enqualcomm/support/service/SynchronousTime.java
app/src/main/java/com/enqualcomm/support/service/base/AbstractConnectionService.java
app/src/main/java/com/enqualcomm/support/service/base/ConnectionService.java
app/src/main/java/com/enqualcomm/support/utils/ConnectionListener.java
app/src/main/java/com/enqualcomm/support/utils/NettyConnection.java
app/src/main/java/com/enqualcomm/support/utils/RxSocket.java

index 3c723b1..f7ccdf6 100644 (file)
@@ -238,14 +238,15 @@ public class CoreService extends Service {
 \r
         ServerHandler(CoreService param1CoreService) { this.mReference = new WeakReference(param1CoreService); }\r
 \r
-        public void onConnectionClose() {\r
+        @Override\r
+        public void onConnectionClose(String errorName) {\r
             CoreService coreService = (CoreService)this.mReference.get();\r
             if (coreService == null)\r
                 return;\r
-            ICLogger.i("onConnectionClose++ retry to connect again!");\r
-            coreService.connectionServiceChain.processConnectionClose(coreService.connection, coreService.runtime);\r
+            ICLogger.i("onConnectionClose++ retry to connect again!  Close Error "+errorName);\r
+            coreService.connectionServiceChain.processConnectionClose(coreService.connection, coreService.runtime,errorName);\r
         }\r
-\r
+        @Override\r
         public void onConnectionOpen() {\r
             CoreService coreService = (CoreService)this.mReference.get();\r
             if (coreService == null)\r
index 6b99f32..8f6acfc 100644 (file)
@@ -91,8 +91,10 @@ public class CheckSIM extends AbstractConnectionService {
     intentFilter.addAction("android.intent.action.SIM_STATE_CHANGED");\r
     (paramRuntime.getContextProxy()).context.registerReceiver(this.SimStateReceive, intentFilter);\r
   }\r
-  \r
-  public boolean onConnectionClose(Connection paramConnection, Runtime paramRuntime) { return false; }\r
+\r
+  @Override\r
+  public boolean onConnectionClose(Connection paramConnection, Runtime paramRuntime, String ErrorMsg) {\r
+    return false; }\r
   \r
   public boolean onConnectionOpen(Connection paramConnection, Runtime paramRuntime) { return false; }\r
   \r
index b60730d..e71d224 100644 (file)
@@ -347,8 +347,10 @@ public static void sendLocationMSG( String Msg){
   public void onAlarmClock(Connection paramConnection, Runtime paramRuntime) {}\r
   \r
   public void onAttach(Connection paramConnection, Runtime paramRuntime) {}\r
-  \r
-  public boolean onConnectionClose(Connection paramConnection, Runtime paramRuntime) { return false; }\r
+\r
+  @Override\r
+  public boolean onConnectionClose(Connection paramConnection, Runtime paramRuntime, String ErrorMsg) {\r
+   return false; }\r
   \r
   public boolean onConnectionOpen(Connection paramConnection, Runtime paramRuntime) { return false; }\r
   \r
index 0ba8cc4..fa5e798 100644 (file)
@@ -50,8 +50,10 @@ public class Initialize extends AbstractConnectionService {
   }\r
   \r
   public void onAttach(Connection paramConnection, Runtime paramRuntime) { this.mInstance = SimSignalUtil.getInstance((paramRuntime.getContextProxy()).context); }\r
-  \r
-  public boolean onConnectionClose(Connection paramConnection, Runtime paramRuntime) {\r
+\r
+  @Override\r
+  public boolean onConnectionClose(Connection paramConnection, Runtime paramRuntime, String ErrorMsg) {\r
+\r
     initOK=false;\r
     return false;\r
   }\r
index f2e6a75..be1c1bd 100644 (file)
@@ -171,13 +171,19 @@ public class KeepAlive extends AbstractConnectionService {
     this.mShutDownReceiver = new ShutDownReceiver();\r
     this.mContext.registerReceiver(this.mShutDownReceiver, intentFilter);\r
   }\r
-  \r
-  public boolean onConnectionClose(Connection paramConnection, Runtime paramRuntime) {\r
+\r
+    @Override\r
+    public boolean onConnectionClose(Connection paramConnection, Runtime paramRuntime, String ErrorMsg) {\r
+\r
 \r
 //    if (isConnected)\r
     //如果KeepAlive被关闭说明网络有问题,因此开启重试联网机制\r
     stopResponseCheckTimer();\r
-    CoreService.getInstance().startConnectionRetryTimer();\r
+    if (!ErrorMsg.equals("DIS_CONNECT_BY_SERVERSIDE")){\r
+        CoreService.getInstance().startConnectionRetryTimer();\r
+    }else{\r
+        ICLogger.i("服务器主动断开,IMEI不对或者命令格式错误!停止重试连接服务器,等待重启或者下一次网络重连。");\r
+    }\r
     connectionError = true;\r
     isConnected = false;\r
     paramRuntime.setServerProtocolConnected(false);\r
@@ -191,8 +197,7 @@ public class KeepAlive extends AbstractConnectionService {
 //    CoreService.needLocateInAfterHeartBeat=true;\r
     return false;\r
   }\r
-\r
-  public boolean onConnectionOpen(Connection paramConnection, Runtime paramRuntime) {\r
+    public boolean onConnectionOpen(Connection paramConnection, Runtime paramRuntime) {\r
 \r
     StringBuilder stringBuilder = new StringBuilder();\r
     stringBuilder.append("onConnectionOpen connectionError=");\r
index 30bb689..b391ff8 100644 (file)
@@ -35,8 +35,10 @@ public class SynchronousTime extends AbstractConnectionService {
   public void onAlarmClock(Connection paramConnection, Runtime paramRuntime) {}\r
   \r
   public void onAttach(Connection paramConnection, Runtime paramRuntime) {}\r
-  \r
-  public boolean onConnectionClose(Connection paramConnection, Runtime paramRuntime) { return this.synchronousTimeOK ^ true; }\r
+\r
+  @Override\r
+  public boolean onConnectionClose(Connection paramConnection, Runtime paramRuntime, String ErrorMsg) {\r
+    return this.synchronousTimeOK ^ true; }\r
 \r
   @Override\r
   public boolean onConnectionOpen(Connection paramConnection, Runtime paramRuntime) {\r
index 67383c3..4f1c0f0 100644 (file)
@@ -21,11 +21,11 @@ public abstract class AbstractConnectionService implements ConnectionService {
       this.nextService.processAttach(paramConnection, paramRuntime); \r
   }\r
   \r
-  public final void processConnectionClose(Connection paramConnection, Runtime paramRuntime) {\r
+  public final void processConnectionClose(Connection paramConnection, Runtime paramRuntime,String ErrorMsg) {\r
     if (this.isDetach)\r
       return; \r
-    if (!onConnectionClose(paramConnection, paramRuntime) && this.nextService != null)\r
-      this.nextService.processConnectionClose(paramConnection, paramRuntime); \r
+    if (!onConnectionClose(paramConnection, paramRuntime,ErrorMsg) && this.nextService != null)\r
+      this.nextService.processConnectionClose(paramConnection, paramRuntime,ErrorMsg);\r
   }\r
   \r
   public final void processConnectionOpen(Connection paramConnection, Runtime paramRuntime) {\r
index 09cbfba..ffe007d 100644 (file)
@@ -5,7 +5,7 @@ import com.enqualcomm.support.utils.Connection;
 import com.enqualcomm.support.bean.Runtime;\r
 \r
 public interface ConnectionService extends BaseService {\r
-  boolean onConnectionClose(Connection paramConnection, Runtime paramRuntime);\r
+  boolean onConnectionClose(Connection paramConnection, Runtime paramRuntime,String ErrorMsg);\r
   \r
   boolean onConnectionOpen(Connection paramConnection, Runtime paramRuntime);\r
   \r
index d86dd44..0a367f9 100644 (file)
@@ -4,7 +4,7 @@ package com.enqualcomm.support.utils;
 import com.enqualcomm.support.bean.StringMessage;\r
 \r
 public interface ConnectionListener {\r
-  void onConnectionClose();\r
+  void onConnectionClose(String errorName);\r
   \r
   void onConnectionOpen();\r
   \r
index 9143fd5..0d248c1 100644 (file)
@@ -447,9 +447,9 @@ public class NettyConnection implements Connection {
                       if (NettyConnection.this.listener!=null){\r
                           NettyConnection.this.listener.onConnectionOpen();\r
                       }\r
-                  }else if (socketStatus.name().equals("DIS_CONNECT")) {\r
+                  }else if (socketStatus.name().equals("DIS_CONNECT") || socketStatus.name().equals("DIS_CONNECT_BY_SERVERSIDE")) {\r
                       if (NettyConnection.this.listener!=null){\r
-                          NettyConnection.this.listener.onConnectionClose();\r
+                          NettyConnection.this.listener.onConnectionClose(socketStatus.name());\r
                       }\r
                       disconnectServer();\r
                   }\r
index 15489fe..8744e76 100644 (file)
@@ -179,7 +179,7 @@ public class RxSocket {
             @Override
             public void call(Subscriber<? super Boolean> subscriber) {
                 try {
-                    if (socketStatus == SocketStatus.DIS_CONNECT) {
+                    if (socketStatus == SocketStatus.DIS_CONNECT  || socketStatus == SocketStatus.DIS_CONNECT_BY_SERVERSIDE) {
                         subscriber.onNext(true);
                         subscriber.onCompleted();
                     }
@@ -294,7 +294,7 @@ public class RxSocket {
              ICLogger.log(TAG,"ReadThread:"+"start");
             while (isReadThreadAlive) {
                 //连接
-                if (socketStatus == SocketStatus.DIS_CONNECT) {
+                if (socketStatus == SocketStatus.DIS_CONNECT || socketStatus == SocketStatus.DIS_CONNECT_BY_SERVERSIDE) {
                     try {
                         if (selectionKey != null) selectionKey.cancel();
                         socketChannel = SocketChannel.open();
@@ -352,8 +352,8 @@ public class RxSocket {
                                 if (length <= 0) {
                                      ICLogger.log( TAG, "服务器主动断开链接!");
                                     isReadThreadAlive = false;
-                                    socketStatus = SocketStatus.DIS_CONNECT;
-                                    connectStatus.onNext(SocketStatus.DIS_CONNECT);
+                                    socketStatus = SocketStatus.DIS_CONNECT_BY_SERVERSIDE;
+                                    connectStatus.onNext(SocketStatus.DIS_CONNECT_BY_SERVERSIDE);
                                     if (socketReconnectCallback!=null)
                                         socketReconnectCallback.onFail("SocketConnectFail3");
 
@@ -387,6 +387,7 @@ public class RxSocket {
 
     public enum SocketStatus {
         DIS_CONNECT,
+        DIS_CONNECT_BY_SERVERSIDE,
         CONNECTING,
         CONNECTED,
     }