增加对AP01,AP02,AP10三个定位相关命令的服务器响应。如果服务器5秒内没有响应重试发送,三次后还没有响应就放弃发送。
authorsnickersun <scy@incartech.cn>
Mon, 13 Apr 2020 07:36:25 +0000 (15:36 +0800)
committersnickersun <scy@incartech.cn>
Mon, 13 Apr 2020 07:36:25 +0000 (15:36 +0800)
app/src/main/java/com/enqualcomm/support/service/Deliver.java
app/src/main/java/com/enqualcomm/support/utils/NettyConnection.java

index 8ac5940..be2583b 100644 (file)
@@ -158,6 +158,11 @@ public class Deliver extends AbstractConnectionService {
 //    mSendMSGHandler.sendEmptyMessage(1);\r
   }\r
 \r
+  private static boolean NeedCheckServerResponse=true;\r
+  private static boolean ServerResponsed=false;\r
+  private static String needCheckResponseCMD=null;\r
+  private static int CheckCount=0;\r
+\r
   public static boolean getAndSendMsgFromQueue(){\r
     boolean ret=false;\r
     if (mRuntime.getUseQueue()) {\r
@@ -170,6 +175,27 @@ public class Deliver extends AbstractConnectionService {
         //如果没有数据从缓存中尝试读取\r
 //        if (queue.isEmpty())\r
 //          loadMessage2Queue();\r
+        if (NeedCheckServerResponse==true && ServerResponsed==false){\r
+          if (needCheckResponseCMD!=null && CheckCount < 3) {\r
+            //如果cmd有效,且尝试次数小于3, 没有收到反馈的情况下,可以重新插入queue进行下一次尝试!\r
+            ICLogger.i("checkSrvResponse "+CheckCount+" times for "+needCheckResponseCMD);\r
+            if (!ServiceUtil.offerQueue(new StringMessage(needCheckResponseCMD), true)) {\r
+              ICLogger.i("checkSrvResponse failed ,重新添加MessageQueue 已满,数据将被丢弃!" + needCheckResponseCMD);\r
+              if (Config.LOG_TOFILE)\r
+                ICLogger.logToFile("APILog", "response failed queueFullskip!  " + needCheckResponseCMD);\r
+            }else{\r
+              if (Config.LOG_TOFILE)\r
+                ICLogger.logToFile("APILog", "response failed retry !  " +CheckCount+" " + needCheckResponseCMD);\r
+            }\r
+            CheckCount++;\r
+          }else{\r
+            ICLogger.i("checkSrvResponse CheckCount="+CheckCount+" Timeout or cmd is null, skip ");\r
+            if (Config.LOG_TOFILE)\r
+              ICLogger.logToFile("APILog", "response timeout skip!  " + needCheckResponseCMD);\r
+            CheckCount=0;\r
+          }\r
+        }\r
+\r
         if (!queue.isEmpty()) {\r
           StringBuilder stringBuilder = new StringBuilder();\r
           if (checkNetwork()) {\r
@@ -181,6 +207,13 @@ public class Deliver extends AbstractConnectionService {
               if (checkNetwork()) {\r
                 connection.sendMsg(cmd);\r
 //                stringMessage = queue.poll();\r
+\r
+                //如果需要Check\r
+                if (NeedCheckServerResponse==true){\r
+                    ICLogger.i("checkSrvResponse "+cmd);\r
+                    needCheckResponseCMD=cmd;\r
+                    ServerResponsed=false;\r
+                }\r
                 ret=true;\r
               } else {\r
                 //已经拿到的缓存,如果刚巧没有网络,就原路放回去\r
@@ -288,6 +321,19 @@ public static void sendLocationMSG( String Msg){
     this.mConnection = paramConnection;\r
     this.mRuntime = paramRuntime;\r
     String cmd = paramStringMessage.cmd();\r
+\r
+    //如果需要检测是否响应。\r
+    if (NeedCheckServerResponse==true){\r
+\r
+      if(needCheckResponseCMD!=null) {\r
+        if( cmd.equals(needCheckResponseCMD.substring(0,6))){\r
+\r
+          ICLogger.i("checkSrvResponse "+cmd+" "+needCheckResponseCMD.substring(0,6)+" is responsed!");\r
+          ServerResponsed=true;\r
+          CheckCount=0;\r
+        }\r
+      }\r
+    }\r
     ICLogger.i("Deliver receive cmd " + paramStringMessage.cmd());\r
     if (cmd.equals("BP07") || cmd.equals("SentVoicePacket")) {\r
       //收到BP07 表示服务器收到一个voicePacket 分包成功,开始检查下一个包是否存在需要发送。\r
index fcc4cc5..38b56fa 100644 (file)
@@ -62,10 +62,12 @@ public class NettyConnection implements Connection {
                             case BP01:\r
                                 API.handleBP01(cmd);\r
                                 ICLogger.i("服务器收到定位AP01");\r
+                                DeliverCMDMessageToSystem("IWAP01",cmd);//通知下面线程状态变化\r
                                 break;\r
                             case BP02:\r
                                 API.handleBP02(cmd);\r
                                 ICLogger.i("服务器收到定位AP02");\r
+                                DeliverCMDMessageToSystem("IWAP02",cmd);//通知下面线程状态变化\r
                                 break;\r
                             case BP03:\r
                                 API.handleBP03(cmd);\r
@@ -77,6 +79,10 @@ public class NettyConnection implements Connection {
                                 //收到发送的语音包\r
                                 API.handleBP07(cmd,NettyConnection.this);\r
                                 break;\r
+                            case BP10:\r
+                                DeliverCMDMessageToSystem("IWAP10",cmd);//通知下面线程状态变化\r
+                                break;\r
+\r
                             case BPTM:\r
                                 API.handleBPTM(cmd);\r
                                 ICLogger.i("服务器收到校时命令APTM");\r