修复Deliver的盲点补传上传逻辑
authorsnickersun <scy@incartech.cn>
Mon, 16 Nov 2020 05:08:46 +0000 (13:08 +0800)
committersnickersun <scy@incartech.cn>
Mon, 16 Nov 2020 05:08:46 +0000 (13:08 +0800)
app/src/main/java/com/enqualcomm/support/service/Deliver.java
app/src/main/java/com/enqualcomm/support/utils/DBHelper.java

index 09182ee..6811bd3 100644 (file)
@@ -149,23 +149,22 @@ public class Deliver extends AbstractConnectionService {
 //    delaySendMSG.run();\r
 //    mSendMSGHandler.sendEmptyMessage(1);\r
   }\r
-  private static boolean NeedCheckServerResponse=true;\r
-  private static boolean ServerResponsed=false;\r
   private static int CheckCount=0;\r
+  private static boolean checkNeedServerResponse(StringMessage cmd){\r
 \r
-  private static void checkNeedServerResponse(StringMessage cmd){\r
-\r
-    if(cmd==null ||\r
-            (cmd!=null && Config.protocol_no==Config.PROTOCOL_FZD  &&\r
-                    (protocolAPIHelper.isCmdStr(cmd).equals("UD") || protocolAPIHelper.isCmdStr(cmd).equals("UD2")))\r
+    boolean NeedCheckServerResponse;\r
+    if(cmd!=null &&\r
+            Config.protocol_no==Config.PROTOCOL_FZD  &&\r
+            (protocolAPIHelper.isCmdStr(cmd).equals("UD") || protocolAPIHelper.isCmdStr(cmd).equals("UD2"))\r
     ){\r
       NeedCheckServerResponse=false;\r
     }else{\r
       NeedCheckServerResponse=true;\r
     }\r
+    return NeedCheckServerResponse;\r
   }\r
   public static void dumpMessage(StringMessage msg){\r
-    /*\r
+\r
     StringBuilder sb = new StringBuilder("StringMessage ");\r
     if (msg!=null) {\r
       sb.append("index ").append(msg.getIndex())\r
@@ -176,7 +175,6 @@ public class Deliver extends AbstractConnectionService {
     }\r
     ICLogger.i(sb.toString());\r
 \r
-     */\r
   }\r
   public static boolean getAndSendMsgFromQueue(){\r
     boolean ret=false;\r
@@ -195,27 +193,27 @@ public class Deliver extends AbstractConnectionService {
 \r
         StringMessage msgWait=mRuntime.getDbHelper().queryWaitCMDRecord();\r
         dumpMessage(msgWait);\r
-        checkNeedServerResponse(msgWait);\r
-\r
-        //如果需要,且没有服务器反馈\r
-        if (NeedCheckServerResponse==true && ServerResponsed==false) {\r
-          //刚刚发送的包不为空,且检测次数小于3,则保留数据,进行下一次重试。\r
-          //如果cmd有效,且尝试次数小于3, 没有收到反馈的情况下,可以重新插入queue进行下一次尝试!\r
-          ICLogger.i("checkSrvResponse " + CheckCount + " times for " + msgWait.cmd() + " " + msgWait.isFromCache());\r
-          if (msgWait.getIndex() >= 0)\r
-            mRuntime.getDbHelper().updateCMDRecord(msgWait.getIndex(), 0);\r
-          dumpMessage(msgWait);\r
-          CheckCount++;\r
-          //尝试次数大于5 ,可能是还没有发送过数据,或者超过重试次数,暂停提取queue中数据进,下次心跳再开始发送\r
-          if (CheckCount > 5) {\r
-            ICLogger.i("checkSrvResponse CheckCount=" + CheckCount + " Timeout or cmd is null, skip ");\r
-            if (Config.LOG_TOFILE)\r
-              ICLogger.logToFile("APILog", "response timeout skip!  ");\r
-            CheckCount = 0;\r
-            if (mLock != null && mLock.isLocked())\r
-              mLock.unlock();\r
-            return false;\r
-          }\r
+\r
+        if(msgWait!=null) {\r
+          //如果需要,且没有服务器反馈\r
+            //刚刚发送的包不为空,且检测次数小于3,则保留数据,进行下一次重试。\r
+            //如果cmd有效,且尝试次数小于3, 没有收到反馈的情况下,可以重新插入queue进行下一次尝试!\r
+            ICLogger.i("checkSrvResponse " + CheckCount + " times for " + msgWait.cmd() + " " + msgWait.isFromCache() + " index " + msgWait.getIndex());\r
+            if (msgWait.getIndex() >= 0) {\r
+              mRuntime.getDbHelper().updateCMDRecord(msgWait.getIndex(), 0);//设置为未发送\r
+            }\r
+            dumpMessage(msgWait);\r
+            CheckCount++;\r
+            //尝试次数大于5 ,可能是还没有发送过数据,或者超过重试次数,暂停提取queue中数据进,下次心跳再开始发送\r
+            if (CheckCount > 5) {\r
+              ICLogger.i("checkSrvResponse CheckCount=" + CheckCount + " Timeout or cmd is null, skip ");\r
+              if (Config.LOG_TOFILE)\r
+                ICLogger.logToFile("APILog", "response timeout skip!  ");\r
+              CheckCount = 0;\r
+              if (mLock != null && mLock.isLocked())\r
+                mLock.unlock();\r
+              return false;\r
+            }\r
 \r
         }\r
 \r
@@ -233,23 +231,22 @@ public class Deliver extends AbstractConnectionService {
               if (checkNetwork()) {\r
 \r
                 connection.send(msgSent);\r
-                //如果需要Check\r
-                if (NeedCheckServerResponse==true){\r
+                //如果需要CheckResponse\r
+                if (checkNeedServerResponse(msgSent)==true){\r
                     ICLogger.i("checkSrvResponse "+topic+" "+cmd);\r
-                    ServerResponsed=false;\r
-                    mRuntime.getDbHelper().updateCMDRecord(msgSent.getIndex(),1);\r
+                    mRuntime.getDbHelper().updateCMDRecord(msgSent.getIndex(),1); //设置为等待响应\r
                 }else{\r
                     ICLogger.i("no need checkSrvResponse "+topic+" "+cmd);\r
-                    ServerResponsed=false;\r
-                    mRuntime.getDbHelper().updateCMDRecord(msgSent.getIndex(),2);\r
+                    mRuntime.getDbHelper().updateCMDRecord(msgSent.getIndex(),2); //直接设置为已经响应\r
                 }\r
                 ret=true;\r
               } else {\r
                 //已经拿到的缓存,如果刚巧没有网络,就原路放回去\r
                 ICLogger.i("网络不通,不能发送!");\r
-                if (msgWait.getIndex() >= 0)\r
-                  mRuntime.getDbHelper().updateCMDRecord(msgSent.getIndex(), 0);\r
-                dumpMessage(msgWait);\r
+                if (msgSent.getIndex() >= 0) {\r
+                  mRuntime.getDbHelper().updateCMDRecord(msgSent.getIndex(), 0); //设置为未发送\r
+                }\r
+                dumpMessage(msgSent);\r
                 ret=false;\r
               }\r
             }else{\r
@@ -272,7 +269,7 @@ public class Deliver extends AbstractConnectionService {
     StringMessage msgWait=mRuntime.getDbHelper().queryWaitCMDRecord();\r
     dumpMessage(msgWait);\r
     if (msgWait!=null)\r
-      mRuntime.getDbHelper().updateCMDRecord(msgWait.getIndex(),0);\r
+      mRuntime.getDbHelper().updateCMDRecord(msgWait.getIndex(),0);//设置为未发送\r
   }\r
   public static void sendLocationMSG( String Msg){\r
 \r
@@ -365,19 +362,17 @@ public class Deliver extends AbstractConnectionService {
       cmd=protocolAPIHelper.isCmdStr(paramStringMessage);\r
     }\r
     //如果需要检测是否响应。\r
-    if (NeedCheckServerResponse==true){\r
-\r
-      StringMessage msgWait=mRuntime.getDbHelper().queryWaitCMDRecord();\r
-      dumpMessage(msgWait);\r
-      if(msgWait!=null) {\r
-        ICLogger.i("====== checkSrvResponse cmd "+cmd+" msg "+protocolAPIHelper.isCmdStr (msgWait));\r
-        if( cmd.equals(protocolAPIHelper.isCmdStr (msgWait))){\r
-          ICLogger.i("checkSrvResponse "+cmd+" "+protocolAPIHelper.isCmdStr (msgWait)+" is responsed!");\r
-          ServerResponsed=true;\r
-          CheckCount=0;\r
-        }\r
+    StringMessage msgWait=mRuntime.getDbHelper().queryWaitCMDRecord();\r
+    dumpMessage(msgWait);\r
+    if(msgWait!=null) {\r
+      ICLogger.i("====== checkSrvResponse cmd " + cmd + " msg " + protocolAPIHelper.isCmdStr(msgWait));\r
+      if (cmd.equals(protocolAPIHelper.isCmdStr(msgWait))) {\r
+        ICLogger.i("checkSrvResponse " + cmd + " " + protocolAPIHelper.isCmdStr(msgWait) + " is responsed!");\r
+        mRuntime.getDbHelper().updateCMDRecord(msgWait.getIndex(), 2);//设置为已读\r
+        CheckCount = 0;\r
       }\r
     }\r
+\r
     ICLogger.i("Deliver receive cmd " + paramStringMessage.cmd());\r
     if (cmd.equals("SentVoicePacket") ) {\r
       //收到BP07 表示服务器收到一个voicePacket 分包成功,开始检查下一个包是否存在需要发送。\r
index bffb700..8e560d5 100644 (file)
@@ -1069,7 +1069,7 @@ public class DBHelper {
           msg.setDate(date,time);\r
           msg.setSentFlag(flag);\r
           msg.setIndex(index);\r
-          ICLogger.i("get cmd Record not sent response _id "+index + " "+date+time+" topic "+topic+" cmd "+cmd);\r
+          ICLogger.i("get cmd Record not sent  _id "+index + " "+date+time+" topic "+topic+" cmd "+cmd);\r
 \r
         }\r
       }\r