release V696
authorsnickersun <scy@incartech.cn>
Sat, 14 Nov 2020 16:21:24 +0000 (00:21 +0800)
committersnickersun <scy@incartech.cn>
Sat, 14 Nov 2020 16:21:24 +0000 (00:21 +0800)
把原来的内存中记录缓存协议命令,改为用数据库记录缓存命令,解决重置后缓存数据丢失问题。

16 files changed:
app/release/ICSer_V696_2011142302_release.apk [moved from app/release/ICSer_V695_2011121531_release.apk with 78% similarity]
app/release/output.json
app/src/main/java/com/enqualcomm/support/CoreService.java
app/src/main/java/com/enqualcomm/support/ICContentProvider.java
app/src/main/java/com/enqualcomm/support/ICSmsManager.java
app/src/main/java/com/enqualcomm/support/MySqlitOpenHelper.java
app/src/main/java/com/enqualcomm/support/bean/StringMessage.java
app/src/main/java/com/enqualcomm/support/service/Deliver.java
app/src/main/java/com/enqualcomm/support/utils/DBHelper.java
app/src/main/java/com/ic/protocols/protocolAPIHelper.java
app/src/main/java/com/ic/protocols/protocol_beehome.java
app/src/main/java/com/ic/protocols/protocol_fzd.java
app/src/main/java/com/ic/protocols/protocol_ic.java
app/src/main/java/com/ic/protocols/protocol_jiai.java
app/src/main/java/com/ic/protocols/protocol_mqtt.java
app/version_code.properties

similarity index 78%
rename from app/release/ICSer_V695_2011121531_release.apk
rename to app/release/ICSer_V696_2011142302_release.apk
index 0009235..90d3ea5 100644 (file)
Binary files a/app/release/ICSer_V695_2011121531_release.apk and b/app/release/ICSer_V696_2011142302_release.apk differ
index a4e240b..1707005 100644 (file)
@@ -1 +1 @@
-[{"outputType":{"type":"APK"},"apkData":{"type":"MAIN","splits":[],"versionCode":695,"versionName":"2011121531","enabled":true,"outputFile":"ICSer_V695_2011121531_release.apk","fullName":"release","baseName":"release"},"path":"ICSer_V695_2011121531_release.apk","properties":{}}]
\ No newline at end of file
+[{"outputType":{"type":"APK"},"apkData":{"type":"MAIN","splits":[],"versionCode":696,"versionName":"2011142302","enabled":true,"outputFile":"ICSer_V696_2011142302_release.apk","fullName":"release","baseName":"release"},"path":"ICSer_V696_2011142302_release.apk","properties":{}}]
\ No newline at end of file
index ac9c1d7..b98263e 100644 (file)
@@ -959,6 +959,10 @@ public class CoreService extends Service {
 \r
         //启动结束设置标志位,让心率和体温检测可以正常执行。\r
         server_starting=false;\r
+\r
+        //重置缓存中的在等待命令\r
+        Deliver.resetCMDReocrdsDB();\r
+\r
         ReConnectToServer();\r
     }\r
 \r
@@ -1277,8 +1281,12 @@ public class CoreService extends Service {
                 // 由于计步接口没有提供设置步数。所以暂时只能清零,不能解决午夜还在运动的情况,会丢失一两次的数据。但是影响不大\r
                 runtime.setLastStepCountForBT(0);\r
                 runtime.setLastStepCount(0);\r
-                this.locationClient.updateStepCount(); //重置后马上跟新当前步数为0, 以便及时更新睡眠信息 一分钟内更新的步数可以忽略不记,从而平滑切换 0点reset 计步数据的计算问题\r
-                updateSleepDate();//更新睡眠信息\r
+                //重置后马上跟新当前步数为0, 以便及时更新睡眠信息 一分钟内更新的步数可以忽略不记,从而平滑切换 0点reset 计步数据的计算问题\r
+                this.locationClient.updateStepCount();\r
+                //更新睡眠信息\r
+                updateSleepDate();\r
+                //清除已经发送的历史记录\r
+                runtime.getDbHelper().clearCMDRecordsHaveSent();\r
                 setCleanStepCountAlarm();\r
                 Config.logBootDate(this);//重置步数的时候,要把开机时间也更新一下,否则第二天 任意时间重启都会造成计步数据清零\r
                 return Service.START_STICKY;\r
@@ -1563,8 +1571,8 @@ public class CoreService extends Service {
             }else {\r
                 if (retry_connect_count >= retry_connect_max_times) {\r
 \r
-                    ICLogger.i("retry " + retry_connect_count + " 次 >= " + retry_connect_max_times + " ,停止重试!等待下一次心跳再重试!");\r
                     no_network_Heartbeats_Count++;\r
+                    ICLogger.i("retry " + retry_connect_count + " 次 >= " + retry_connect_max_times + " ,停止重试!等待下一次心跳再重试! 已经第"+no_network_Heartbeats_Count+"次心跳都没有连接服务器成功!");\r
                     stopConnectionRetryTimer();\r
 \r
                 } else {\r
index 7fff74d..7846f4b 100644 (file)
@@ -177,6 +177,10 @@ public class ICContentProvider extends ContentProvider {
   private static final String ALARM_MSG_RECORDS_MIME = "vnd.android.cursor.dir/vnd.com.enqualcomm.support.alarmMSG";\r
   public static final Uri ALARM_MSG_RECORDS_URI = Uri.parse("content://com.enqualcomm.support/alarmMSG");\r
 \r
+  public static final String PROTOCOL_CMD_RECORDS_TABLE_NAME = "PROTOCOL_CMD_RECORDS";\r
+  private static final int PROTOCOL_CMD_RECORDS = 27;\r
+  private static final String PROTOCOL_CMD_RECORDS_MIME = "vnd.android.cursor.dir/vnd.com.enqualcomm.support.cmdRecord";\r
+  public static final Uri PROTOCOL_CMD_RECORDS_URI = Uri.parse("content://com.enqualcomm.support/cmdRecord");\r
 \r
   private SQLiteDatabase db;\r
   \r
@@ -207,6 +211,7 @@ public class ICContentProvider extends ContentProvider {
     URI_MATCHER.addURI("com.enqualcomm.support", "eventMessage", EVENT_MESSAGE); //24\r
     URI_MATCHER.addURI("com.enqualcomm.support", "sit", SIT); //25\r
     URI_MATCHER.addURI("com.enqualcomm.support", "alarmMSG", ALARM_MSG_RECORDS); //26\r
+    URI_MATCHER.addURI("com.enqualcomm.support", "cmdRecord", PROTOCOL_CMD_RECORDS); //27\r
 \r
   }\r
   \r
@@ -304,6 +309,10 @@ public class ICContentProvider extends ContentProvider {
         i = bulkInsertLocale(ALARM_MSG_RECORDS_TABLE_NAME, paramArrayOfContentValues);\r
         getContext().getContentResolver().notifyChange(ALARM_MSG_RECORDS_URI, null);\r
         break;\r
+      case PROTOCOL_CMD_RECORDS:\r
+        i = bulkInsertLocale(PROTOCOL_CMD_RECORDS_TABLE_NAME, paramArrayOfContentValues);\r
+        getContext().getContentResolver().notifyChange(PROTOCOL_CMD_RECORDS_URI, null);\r
+        break;\r
       default:\r
         break;\r
     }\r
@@ -575,6 +584,16 @@ public class ICContentProvider extends ContentProvider {
         if (j != 0) {\r
           getContext().getContentResolver().notifyChange(ALARM_MSG_RECORDS_URI, null);\r
 \r
+        }\r
+        i = j;\r
+        break;\r
+      case PROTOCOL_CMD_RECORDS:\r
+\r
+        j = this.db.delete(PROTOCOL_CMD_RECORDS_TABLE_NAME, whereClause, whereArgs);\r
+\r
+        if (j != 0) {\r
+          getContext().getContentResolver().notifyChange(PROTOCOL_CMD_RECORDS_URI, null);\r
+\r
         }\r
         i = j;\r
         break;\r
@@ -644,6 +663,8 @@ public class ICContentProvider extends ContentProvider {
         return SIT_MIME;\r
       case ALARM_MSG_RECORDS:\r
         return ALARM_MSG_RECORDS_MIME;\r
+      case PROTOCOL_CMD_RECORDS:\r
+        return PROTOCOL_CMD_RECORDS_MIME;\r
       default:\r
         return null;\r
     } \r
@@ -726,6 +747,10 @@ public class ICContentProvider extends ContentProvider {
         paramUri = ContentUris.withAppendedId(paramUri, this.db.insert(ALARM_MSG_RECORDS_TABLE_NAME, null, paramContentValues));\r
         getContext().getContentResolver().notifyChange(ALARM_MSG_RECORDS_URI, null);\r
         break;\r
+      case PROTOCOL_CMD_RECORDS:\r
+        paramUri = ContentUris.withAppendedId(paramUri, this.db.insert(PROTOCOL_CMD_RECORDS_TABLE_NAME, null, paramContentValues));\r
+        getContext().getContentResolver().notifyChange(PROTOCOL_CMD_RECORDS_URI, null);\r
+        break;\r
       default:\r
         return null;\r
     } \r
@@ -839,6 +864,8 @@ public class ICContentProvider extends ContentProvider {
         return this.db.query(SIT_TABLE_NAME, columns, paramString1, paramArrayOfString2, null, null, paramString2);\r
       case ALARM_MSG_RECORDS:\r
         return this.db.query(ALARM_MSG_RECORDS_TABLE_NAME, columns, paramString1, paramArrayOfString2, null, null, paramString2);\r
+      case PROTOCOL_CMD_RECORDS:\r
+        return this.db.query(PROTOCOL_CMD_RECORDS_TABLE_NAME, columns, paramString1, paramArrayOfString2, null, null, paramString2);\r
       default:\r
         return null;\r
     }\r
@@ -1112,6 +1139,16 @@ public class ICContentProvider extends ContentProvider {
           i = j;\r
         }\r
 \r
+        break;\r
+      case PROTOCOL_CMD_RECORDS:\r
+\r
+        j = this.db.update(PROTOCOL_CMD_RECORDS_TABLE_NAME, paramContentValues, whereClause, whereArgs);\r
+        i = j;\r
+        if (j != 0) {\r
+          getContext().getContentResolver().notifyChange(PROTOCOL_CMD_RECORDS_URI, null);\r
+          i = j;\r
+        }\r
+\r
         break;\r
       default:\r
         break;\r
index 777f4e3..8db23ce 100644 (file)
@@ -24,6 +24,7 @@ import android.widget.Toast;
 import com.enqualcomm.support.bean.Contact;\r
 import com.enqualcomm.support.bean.ICLocation;\r
 import com.enqualcomm.support.bean.Runtime;\r
+import com.enqualcomm.support.bean.StringMessage;\r
 import com.enqualcomm.support.service.AudioService;\r
 import com.enqualcomm.support.service.Deliver;\r
 import com.enqualcomm.support.service.SmsDatabaseChaneObserver;\r
@@ -1212,6 +1213,50 @@ public class ICSmsManager  extends BroadcastReceiver {
                Deliver.sendLocationMSG(protocolAPIHelper.getLBSLocationMSG(runtime));\r
            }\r
 \r
+        }else if(cmd.startsWith("testCMDRecords")) {\r
+\r
+            if(CoreService.getInstance()!=null){\r
+                StringMessage msg=protocolAPIHelper.getLBSLocationMSG(runtime);\r
+                runtime.getDbHelper().insertCMDRecord(msg);\r
+                Deliver.dumpMessage(msg);\r
+                Util.mSleep(2000);\r
+                msg=protocolAPIHelper.getLBSLocationMSG(runtime);\r
+                runtime.getDbHelper().insertCMDRecord(msg);\r
+                Deliver.dumpMessage(msg);\r
+                Util.mSleep(2000);\r
+                msg=protocolAPIHelper.getLBSLocationMSG(runtime);\r
+                runtime.getDbHelper().insertCMDRecord(msg);\r
+                Deliver.dumpMessage(msg);\r
+\r
+                Deliver.triggerSendThread();\r
+                /*\r
+                msg=runtime.getDbHelper().queryNotSentCMDRecord();\r
+                Deliver.dumpMessage(msg);\r
+                runtime.getDbHelper().updateCMDRecord(msg.getIndex(),1);\r
+                msg=runtime.getDbHelper().queryWaitCMDRecord();\r
+                Deliver.dumpMessage(msg);\r
+                runtime.getDbHelper().updateCMDRecord(msg.getIndex(),2);\r
+                Deliver.dumpMessage(msg);\r
+\r
+                msg=runtime.getDbHelper().queryNotSentCMDRecord();\r
+                Deliver.dumpMessage(msg);\r
+                runtime.getDbHelper().updateCMDRecord(msg.getIndex(),1);\r
+                msg=runtime.getDbHelper().queryWaitCMDRecord();\r
+                Deliver.dumpMessage(msg);\r
+                runtime.getDbHelper().updateCMDRecord(msg.getIndex(),2);\r
+                Deliver.dumpMessage(msg);\r
+\r
+                msg=runtime.getDbHelper().queryNotSentCMDRecord();\r
+                Deliver.dumpMessage(msg);\r
+                runtime.getDbHelper().updateCMDRecord(msg.getIndex(),1);\r
+                msg=runtime.getDbHelper().queryWaitCMDRecord();\r
+                Deliver.dumpMessage(msg);\r
+                runtime.getDbHelper().updateCMDRecord(msg.getIndex(),2);\r
+                Deliver.dumpMessage(msg);\r
+*/\r
+\r
+            }\r
+\r
         }\r
     }\r
 }
\ No newline at end of file
index 06bbaa7..3f4d72f 100644 (file)
@@ -8,7 +8,7 @@ import com.enqualcomm.support.utils.ICLogger;
 \r
 \r
 public class MySqlitOpenHelper extends SQLiteOpenHelper {\r
-  private static int dbVersion=9;\r
+  private static int dbVersion=10;\r
   public MySqlitOpenHelper(Context paramContext) { super(paramContext, "data", null, dbVersion); }\r
   \r
   public void onCreate(SQLiteDatabase sqlite) {\r
@@ -24,9 +24,13 @@ public class MySqlitOpenHelper extends SQLiteOpenHelper {
     sqlite.execSQL("CREATE TABLE DOWNLOADINFO(_id INTEGER PRIMARY KEY AUTOINCREMENT ,IMSI TEXT,TIME TEXT,NUMBER TEXT,TOTAL_NUMBER TEXT)");\r
     sqlite.execSQL("CREATE TABLE STHEART_RATE(_id INTEGER PRIMARY KEY AUTOINCREMENT ,START_TIME TEXT ,END_TIME TEXT ,WEEK TEXT ,STATUS TEXT,INTERVAL TEXT)");\r
     sqlite.execSQL("CREATE TABLE UNREADMSG(_id INTEGER PRIMARY KEY AUTOINCREMENT ,CATEGORY INTEGER ,ID TEXT ,COUNT INTEGER,RECVTIME INTEGER)");\r
+    create_tables(sqlite);\r
+}\r
+\r
 \r
+  private void create_tables(SQLiteDatabase sqlite){\r
 \r
-    /*\r
+ /*\r
 系统对话消息表,包含微聊,系统推送文本,上传图片,上传语音等一系列消息。\r
 Pushtxt、message\r
 数据库 Message,记录所有message,包括类型(下发txt,chat msg, chat image),文件url或者文本内容。\r
@@ -45,7 +49,7 @@ Pushtxt、message
 2个数据库,时间段和当前状态记录(包括历史记录)。\r
 */\r
     sqlite.execSQL("CREATE TABLE ANTIOFF(_id INTEGER PRIMARY KEY AUTOINCREMENT ,START_TIME TEXT ,END_TIME TEXT ,WEEK TEXT ,STATUS TEXT,CUR_SYS_STATUS TEXT)");\r
-   // sqlite.execSQL("CREATE TABLE ANTIOFF_RECORDS(_id INTEGER PRIMARY KEY AUTOINCREMENT ,TIME TEXT ,STATUS TEXT,CUR_SYS_STATUS TEXT)");\r
+    // sqlite.execSQL("CREATE TABLE ANTIOFF_RECORDS(_id INTEGER PRIMARY KEY AUTOINCREMENT ,TIME TEXT ,STATUS TEXT,CUR_SYS_STATUS TEXT)");\r
 \r
 /*\r
 睡眠\r
@@ -65,10 +69,14 @@ Pushtxt、message
 \r
     /*所有报警的记录表,包括开关机事件*/\r
     sqlite.execSQL("CREATE TABLE ALARM_MSG_RECORDS(_id INTEGER PRIMARY KEY AUTOINCREMENT ,DATE TEXT, TIME TEXT ,ALARM TEXT )");\r
+\r
+    /*缓存协议记录*/\r
+    sqlite.execSQL("CREATE TABLE PROTOCOL_CMD_RECORDS(_id INTEGER PRIMARY KEY AUTOINCREMENT , FLAG INTEGER, DATE TEXT, TIME TEXT ,TOPIC TEXT,CMD TEXT )");\r
+\r
   }\r
   \r
   public void onUpgrade(SQLiteDatabase sqlite, int oldDBversion, int newDBversion) {\r
-    if (oldDBversion <dbVersion) {\r
+    if (oldDBversion < 9) {\r
       ICLogger.i("数据库升级 to "+dbVersion);\r
       sqlite.execSQL("DROP TABLE IF EXISTS MESSAGE");\r
       sqlite.execSQL("DROP TABLE IF EXISTS EVENT_MESSAGE");\r
@@ -77,47 +85,10 @@ Pushtxt、message
       sqlite.execSQL("DROP TABLE IF EXISTS SLEEP_STATUS");\r
       sqlite.execSQL("DROP TABLE IF EXISTS SIT");\r
       sqlite.execSQL("DROP TABLE IF EXISTS ALARM_MSG_RECORDS");\r
-\r
-    /*\r
-系统对话消息表,包含微聊,系统推送文本,上传图片,上传语音等一系列消息。\r
-Pushtxt、message\r
-数据库 Message,记录所有message,包括类型(下发txt,chat msg, chat image),文件url或者文本内容。\r
-*/\r
-      sqlite.execSQL("CREATE TABLE MESSAGE(_id INTEGER PRIMARY KEY AUTOINCREMENT ,CATEGORY INTEGER ,CONTENT TEXT ,PREVIEW TEXT ,STATUS INTEGER ,IN_OR_OUT INTEGER ,CONTACT_CATEGORY INTEGER ,CONTACT_NUMBER TEXT ,SERVER_TIME TEXT ,LOCAL_TIME INTEGER ,ICON TEXT)");\r
-      //sqlite.execSQL("CREATE TABLE MESSAGE(_id INTEGER PRIMARY KEY AUTOINCREMENT ,CATEGORY INTEGER ,CONTENT TEXT ,PREVIEW TEXT ,STATUS INTEGER ,IN_OR_OUT INTEGER ,CONTACT_CATEGORY INTEGER ,CONTACT_NUMBER TEXT ,SERVER_TIME TEXT ,LOCAL_TIME INTEGER ,ICON TEXT,FILETYPE INTEGER,DATATYPE INTEGER)");\r
-\r
-\r
-\r
-//日志表格,存储开机关机,低电报警等消息。。。\r
-      sqlite.execSQL("CREATE TABLE EVENT_MESSAGE(_id INTEGER PRIMARY KEY AUTOINCREMENT , EVENT_TYPE INTEGER, EVENT_NAME TEXT, TIME TEXT )");\r
-\r
-/*\r
-脱腕检测时段AntiOff\r
-本身需要时间段的,在时间段内才进行 脱腕检测。没有设置时间段的话,或者从0:00~23:59表示持续判断脱腕检测。\r
-2个数据库,时间段和当前状态记录(包括历史记录)。\r
-*/\r
-      sqlite.execSQL("CREATE TABLE ANTIOFF(_id INTEGER PRIMARY KEY AUTOINCREMENT ,START_TIME TEXT ,END_TIME TEXT ,WEEK TEXT ,STATUS TEXT,CUR_SYS_STATUS TEXT)");\r
-      // sqlite.execSQL("CREATE TABLE ANTIOFF_RECORDS(_id INTEGER PRIMARY KEY AUTOINCREMENT ,TIME TEXT ,STATUS TEXT,CUR_SYS_STATUS TEXT)");\r
-\r
-/*\r
-睡眠\r
-根据时间段进行检测,时间段内,根据翻滚次数确认其睡眠类型。如深度睡眠或者浅睡。\r
-2个数据库翻滚次数记录,当每日睡眠情况统计计算,检测时间段记在settings里,就不放在数据库了。\r
-*/\r
-      /*每次打点的记录表  SLEEP_DATE 代表记录睡眠的日期,例如 22日上午7:00的计入到21日的睡眠记录中。 DATE代表记录的时间,此出应该等于上文的 22日 7:00 */\r
-      sqlite.execSQL("CREATE TABLE SLEEP_RECORDS(_id INTEGER PRIMARY KEY AUTOINCREMENT ,SLEEP_DATE TEXT,DATE TEXT, STEPCOUNT INTEGER ,ROLLTIMES INTEGER ,STATUS TEXT )");\r
-      /*计算后的分值,每天会在睡眠结束后计算Records获得*/\r
-      sqlite.execSQL("CREATE TABLE SLEEP_STATUS(_id INTEGER PRIMARY KEY AUTOINCREMENT , DATE TEXT , DEEP_SLEEP INTEGER , LIGHT_SLEEP INTEGER ,SCORE INTEGER )");\r
-\r
-/*久坐\r
-根据时间段进行检测,时间段内,根据计步变化确认其是否在坐着。\r
-1个数据库 久坐检测时间段,报警时长度要求,报警记录*/\r
-      sqlite.execSQL("CREATE TABLE SIT(_id INTEGER PRIMARY KEY AUTOINCREMENT ,START_TIME TEXT ,END_TIME TEXT ,WEEK TEXT ,INTERVAL INTEGER)");\r
-\r
-\r
-      /*所有报警的记录表,包括开关机事件*/\r
-      sqlite.execSQL("CREATE TABLE ALARM_MSG_RECORDS(_id INTEGER PRIMARY KEY AUTOINCREMENT ,DATE TEXT, TIME TEXT ,ALARM TEXT )");\r
-\r
+      create_tables(sqlite);\r
+    }else if (oldDBversion == 9 ){\r
+      /*缓存协议记录*/\r
+      sqlite.execSQL("CREATE TABLE PROTOCOL_CMD_RECORDS(_id INTEGER PRIMARY KEY AUTOINCREMENT , FLAG INTEGER, DATE TEXT, TIME TEXT ,TOPIC TEXT,CMD TEXT )");\r
     }\r
   }\r
 }\r
index 9a2adc2..908495f 100644 (file)
@@ -3,41 +3,95 @@ package com.enqualcomm.support.bean;
 import java.util.ArrayList;\r
 \r
 public class StringMessage {\r
+  //暂时未用\r
   ArrayList<byte[]> bs;\r
-  \r
+\r
+  //目前作为消息主体,除了mqtt协议还需要一个topic(fragments[0]) , 其他协议就是要发送的内容本身。\r
   private String cache;\r
-  \r
+\r
+  //数据库中的index\r
+  private int index=-1;\r
+\r
+  //命令日期\r
+  private String date=null;\r
+\r
+  //命令时间\r
+  private String time=null;\r
+  //mqtt协议中第一条就是 topic,其他协议中就是cmdname或者无用\r
   protected String[] fragments;\r
-  \r
-  public boolean u8;\r
-  \r
+\r
+  //发送标志(表示已经接收到服务器返回消息) , 0 未发送, 1 发送等回复, 2 已回复\r
+  private int sentFlag;\r
+\r
+  //除mqtt协议可以使用\r
   public StringMessage(String paramString) {\r
     this.cache = paramString;\r
-    this.u8 = true;\r
+    this.sentFlag = 0;\r
+  }\r
+\r
+  public String getDate(){\r
+    return date;\r
   }\r
-  \r
-  public StringMessage(String[] paramArrayOfString) { this(paramArrayOfString, true); }\r
-  \r
+\r
+  public String getTime(){\r
+    return time;\r
+  }\r
+\r
+  public int getIndex(){\r
+    return index;\r
+  }\r
+\r
+  public void setIndex(int i){\r
+    index=i;\r
+  }\r
+\r
+  public void setDate(String date1,String time1){\r
+    date=date1;\r
+    time=time1;\r
+  }\r
+  //mqtt协议使用 设置topic\r
+  public StringMessage(String[] paramArrayOfString) { this(paramArrayOfString, 0); }\r
+\r
+\r
+  //暂时未用,二进制数据备用\r
   public StringMessage(String[] paramArrayOfString, ArrayList<byte[]> paramArrayList) {\r
     this.fragments = paramArrayOfString;\r
     this.bs = paramArrayList;\r
+    this.sentFlag=0;\r
   }\r
-  \r
-  public StringMessage(String[] paramArrayOfString, boolean paramBoolean) {\r
+\r
+  //mqtt协议使用,设置topic 以及 发送标志\r
+  public StringMessage(String[] paramArrayOfString, int paramBoolean) {\r
     this.fragments = paramArrayOfString;\r
-    this.u8 = paramBoolean;\r
+    this.sentFlag = paramBoolean;\r
+  }\r
+\r
+  //设置发送flag\r
+  public void setSentFlag(int f){\r
+    sentFlag=f;\r
+  }\r
+\r
+  //获取发送flag\r
+  public int haveSent(){\r
+    return sentFlag;\r
   }\r
-  \r
+\r
+  //未用\r
   public String[] all() { return this.fragments; }\r
-  \r
+\r
+  //获取topic内容\r
   public String cmd() { return this.fragments[0]; }\r
-  \r
+\r
+  //获取协议消息主体内容\r
   public String isFromCache() { return this.cache; }\r
-  \r
+\r
+  //更新协议消息主体内容\r
   public void refresh(String paramString) { this.cache = paramString; }\r
-  \r
+\r
+  //未用\r
   public int size() { return (this.fragments != null) ? this.fragments.length : 0; }\r
-  \r
+\r
+  //未用\r
   public ArrayList<byte[]> source() { return this.bs; }\r
 }\r
 \r
index b43025d..09826c3 100644 (file)
@@ -20,6 +20,7 @@ import com.enqualcomm.support.Constants;
 import com.enqualcomm.support.CoreService;\r
 import com.enqualcomm.support.R;\r
 import com.enqualcomm.support.bean.VoiceContent;\r
+import com.enqualcomm.support.utils.DBHelper;\r
 import com.enqualcomm.support.utils.TemperatureUtil;\r
 import com.enqualcomm.support.utils.TimeUtil;\r
 import com.ic.protocols.protocolAPIHelper;\r
@@ -150,7 +151,6 @@ public class Deliver extends AbstractConnectionService {
   }\r
   private static boolean NeedCheckServerResponse=true;\r
   private static boolean ServerResponsed=false;\r
-  private static StringMessage needCheckResponseCMD=null;\r
   private static int CheckCount=0;\r
 \r
   private static void checkNeedServerResponse(StringMessage cmd){\r
@@ -162,7 +162,17 @@ public class Deliver extends AbstractConnectionService {
         NeedCheckServerResponse=true;\r
       }\r
   }\r
-\r
+  public static void dumpMessage(StringMessage msg){\r
+    StringBuilder sb = new StringBuilder("StringMessage ");\r
+    if (msg!=null) {\r
+      sb.append("index ").append(msg.getIndex())\r
+              .append("\nDate ").append(msg.getDate()).append(msg.getTime())\r
+              .append("\nflag ").append(msg.haveSent())\r
+              .append("\ntopic ").append(msg.cmd())\r
+              .append("\ncmd ").append(msg.isFromCache()).append("\n");\r
+    }\r
+    ICLogger.i(sb.toString());\r
+  }\r
   public static boolean getAndSendMsgFromQueue(){\r
     boolean ret=false;\r
     if (mRuntime.getUseQueue()) {\r
@@ -177,65 +187,64 @@ public class Deliver extends AbstractConnectionService {
 //          loadMessage2Queue();\r
 \r
         //检查刚刚发送出去的包是否需要检查server response\r
-        checkNeedServerResponse(needCheckResponseCMD);\r
+\r
+        StringMessage msgWait=mRuntime.getDbHelper().queryWaitCMDRecord();\r
+        dumpMessage(msgWait);\r
+        checkNeedServerResponse(msgWait);\r
 \r
         //如果需要,且没有服务器反馈\r
-        if (NeedCheckServerResponse==true && ServerResponsed==false){\r
+        if (NeedCheckServerResponse==true && ServerResponsed==false) {\r
           //刚刚发送的包不为空,且检测次数小于3,则保留数据,进行下一次重试。\r
-//          if (needCheckResponseCMD!=null && CheckCount < 3) {\r
-          if (needCheckResponseCMD!=null ) {  //一直检测 是否服务器收到。\r
-            //如果cmd有效,且尝试次数小于3, 没有收到反馈的情况下,可以重新插入queue进行下一次尝试!\r
-            ICLogger.i("checkSrvResponse "+CheckCount+" times for "+needCheckResponseCMD.cmd()+ " "+needCheckResponseCMD.isFromCache());\r
-            if (!ServiceUtil.offerQueue(needCheckResponseCMD, true)) {\r
-              ICLogger.i("checkSrvResponse failed ,重新添加MessageQueue 已满,数据将被丢弃!" + needCheckResponseCMD.cmd()+ " "+needCheckResponseCMD.isFromCache());\r
-              if (Config.LOG_TOFILE)\r
-                ICLogger.logToFile("APILog", "response failed queueFullskip!  " + needCheckResponseCMD.cmd()+ " "+needCheckResponseCMD.isFromCache());\r
-            }else{\r
-              if (Config.LOG_TOFILE)\r
-                ICLogger.logToFile("APILog", "response failed retry !  " +CheckCount+" " + needCheckResponseCMD.cmd()+ " "+needCheckResponseCMD.isFromCache());\r
-            }\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
+          //如果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
         }\r
 \r
-        if (!queue.isEmpty()) {\r
           StringBuilder stringBuilder = new StringBuilder();\r
           if (checkNetwork()) {\r
-            StringMessage stringMessage = queue.poll();\r
-            if (stringMessage != null) {\r
-              String cmd = stringMessage.isFromCache();\r
-              String topic = stringMessage.cmd();\r
+            StringMessage msgSent=mRuntime.getDbHelper().queryNotSentCMDRecord();\r
+            dumpMessage(msgSent);\r
+            if (msgSent != null) {\r
+              String cmd = msgSent.isFromCache();\r
+              String topic = msgSent.cmd();\r
               stringBuilder.append(topic);\r
               stringBuilder.append(" ");\r
               stringBuilder.append(cmd);\r
               stringBuilder.append("\n");\r
               if (checkNetwork()) {\r
-                connection.send(stringMessage);\r
-//                stringMessage = queue.poll();\r
-                needCheckResponseCMD=stringMessage;\r
+\r
+                connection.send(msgSent);\r
                 //如果需要Check\r
                 if (NeedCheckServerResponse==true){\r
                     ICLogger.i("checkSrvResponse "+topic+" "+cmd);\r
                     ServerResponsed=false;\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
                 }\r
                 ret=true;\r
               } else {\r
                 //已经拿到的缓存,如果刚巧没有网络,就原路放回去\r
                 ICLogger.i("网络不通,不能发送!");\r
-                if (!ServiceUtil.offerQueue(stringMessage,true)){\r
-                  ICLogger.i("MessageQueue 已满,数据将被丢弃!"+ stringMessage);\r
-                  if (Config.LOG_TOFILE) ICLogger.logToFile( "APILog", " queueFullskip!  " + stringMessage);\r
-                }\r
+                if (msgWait.getIndex() >= 0)\r
+                  mRuntime.getDbHelper().updateCMDRecord(msgSent.getIndex(), 0);\r
+                dumpMessage(msgWait);\r
                 ret=false;\r
               }\r
             }else{\r
@@ -243,11 +252,8 @@ public class Deliver extends AbstractConnectionService {
             }\r
           }\r
           str = stringBuilder.toString();\r
-        } else {\r
-          str = "no message!\n";\r
-        }\r
         ICLogger.i("send cached cmd : \n"+str);\r
-        ICLogger.i("\n"+queue.size()+" left in Queue!");\r
+        //ICLogger.i("\n"+queue.size()+" left in Queue!");\r
       }finally {\r
         if(mLock!=null && mLock.isLocked())\r
           mLock.unlock();\r
@@ -256,7 +262,13 @@ public class Deliver extends AbstractConnectionService {
     return ret;\r
   }\r
 \r
-\r
+  public static void resetCMDReocrdsDB(){\r
+    //正常应该只有一个在wait的记录,如果开机的时候,可能需要处理一下第一条记录\r
+    StringMessage msgWait=mRuntime.getDbHelper().queryWaitCMDRecord();\r
+    dumpMessage(msgWait);\r
+    if (msgWait!=null)\r
+      mRuntime.getDbHelper().updateCMDRecord(msgWait.getIndex(),0);\r
+  }\r
   public static void sendLocationMSG( String Msg){\r
 \r
     if(Msg==null ||Msg.trim().isEmpty()){\r
@@ -272,14 +284,10 @@ public class Deliver extends AbstractConnectionService {
     }\r
 \r
     if(mRuntime.getUseQueue()){\r
-      if(!ServiceUtil.offerQueue(Msg)) {\r
-        ICLogger.i(" MessageQueue 已满,数据将被丢弃," + Msg.cmd()+" "+Msg.isFromCache());\r
-        if (Config.LOG_TOFILE)ICLogger.logToFile( "APILog", " queueFullskip  " + Msg.cmd()+" "+Msg.isFromCache());\r
-      }else{\r
-        if (Config.LOG_TOFILE)ICLogger.logToFile( "APILog", " queueCMD  " + Msg.cmd()+" "+Msg.isFromCache());\r
-      }\r
-//      if(queue.size()>5) //测试queue 发送逻辑用\r
-        triggerSendThread();\r
+      long id=mRuntime.getDbHelper().insertCMDRecord(Msg);\r
+      Msg.setIndex((int)id);\r
+      dumpMessage(Msg);\r
+      triggerSendThread();\r
     }else {\r
       if (checkNetwork()) {\r
         ICLogger.i(" first send " + Msg);\r
@@ -354,10 +362,12 @@ public class Deliver extends AbstractConnectionService {
     //如果需要检测是否响应。\r
     if (NeedCheckServerResponse==true){\r
 \r
-      if(needCheckResponseCMD!=null) {\r
-        ICLogger.i("====== checkSrvResponse cmd "+cmd+" msg "+protocolAPIHelper.isCmdStr (needCheckResponseCMD));\r
-        if( cmd.equals(protocolAPIHelper.isCmdStr (needCheckResponseCMD))){\r
-          ICLogger.i("checkSrvResponse "+cmd+" "+protocolAPIHelper.isCmdStr (needCheckResponseCMD)+" is responsed!");\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
@@ -591,6 +601,7 @@ public class Deliver extends AbstractConnectionService {
   }\r
 \r
 \r
+\r
   private void playVoice(Context paramContext,String voicefile) {\r
     AudioService.getInstance().play(voicefile);\r
   }\r
index f177850..bffb700 100644 (file)
@@ -30,6 +30,7 @@ import com.enqualcomm.support.bean.Silent;
 import com.enqualcomm.support.bean.SleepInfo;\r
 import com.enqualcomm.support.bean.SleepRecord;\r
 import com.enqualcomm.support.bean.StheartRate;\r
+import com.enqualcomm.support.bean.StringMessage;\r
 import com.enqualcomm.support.bean.Weather;\r
 \r
 import java.util.ArrayList;\r
@@ -1005,6 +1006,117 @@ public class DBHelper {
 \r
   }\r
 \r
+//sqlite.execSQL("CREATE TABLE PROTOCOL_CMD_RECORDS(_id INTEGER PRIMARY KEY AUTOINCREMENT , FLAG INTEGER, DATE TEXT, TIME TEXT ,TOPIC TEXT,CMD TEXT )");\r
+\r
+  public long insertCMDRecord(StringMessage msg){\r
+    ContentValues values = new ContentValues();\r
+    values.put("FLAG",msg.haveSent());\r
+    if(msg.getDate()==null || msg.getTime()==null)\r
+      msg.setDate(TimeUtil.getSystemDateYYMMDD(),TimeUtil.getSystemTimeHHmmss());\r
+    values.put("DATE",msg.getDate());\r
+    values.put("TIME",msg.getTime());\r
+    values.put("TOPIC",msg.cmd());\r
+    values.put("CMD",msg.isFromCache());\r
+    long raw_contactID = ContentUris.parseId(cr.insert(ICContentProvider.PROTOCOL_CMD_RECORDS_URI, values));\r
+\r
+    return raw_contactID;\r
+  }\r
+\r
+\r
+  //\r
+  public void updateCMDRecord(int id, int flag){\r
+\r
+    String WhereClause=null;\r
+    if (id>=0) {\r
+      WhereClause=new StringBuilder("_id=").append(id).toString();\r
+\r
+      ContentValues flagcontent = new ContentValues();\r
+      flagcontent.put("FLAG", flag);\r
+      this.cr.update(ICContentProvider.PROTOCOL_CMD_RECORDS_URI, flagcontent, WhereClause, (String[])null);\r
+    }\r
+  }\r
+\r
+  public void clearCMDRecordsHaveSent(){\r
+    ContentResolver pcr = this.cr;\r
+    Uri table = ICContentProvider.PROTOCOL_CMD_RECORDS_URI;\r
+    StringBuilder where = new StringBuilder();\r
+    where.append("FLAG=2");\r
+    ICLogger.i("delete cmdRecords have sent ");\r
+    pcr.delete(table, where.toString(), (String[])null);\r
+  }\r
+\r
+  public StringMessage queryNotSentCMDRecord(){\r
+    ContentResolver pcr = this.cr;\r
+    Uri table = ICContentProvider.PROTOCOL_CMD_RECORDS_URI;\r
+    StringBuilder where = new StringBuilder();\r
+    where.append("FLAG=0");\r
+    ICLogger.i("Query cmdRecords "+where);\r
+    Cursor cmdrecords = pcr.query(table, (String[])null, where.toString(), (String[])null, (String)null);\r
+    StringMessage msg=null;\r
+    if (cmdrecords != null) {\r
+      int score=0;\r
+      if (cmdrecords.getCount()> 0) {\r
+        if (cmdrecords.moveToFirst()) {\r
+          String topic=cmdrecords.getString(cmdrecords.getColumnIndex("TOPIC"));\r
+          String cmd=cmdrecords.getString(cmdrecords.getColumnIndex("CMD"));\r
+          String date=cmdrecords.getString(cmdrecords.getColumnIndex("DATE"));\r
+          String time=cmdrecords.getString(cmdrecords.getColumnIndex("TIME"));\r
+          int flag=cmdrecords.getInt(cmdrecords.getColumnIndex("FLAG"));\r
+          int index=cmdrecords.getInt(cmdrecords.getColumnIndex("_id"));\r
+\r
+          msg=new StringMessage(new String[]{topic});\r
+          msg.refresh(cmd);\r
+          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
+\r
+        }\r
+      }\r
+      cmdrecords.close();\r
+\r
+      if (msg==null)\r
+        ICLogger.i("no cmd record in not sent status !");\r
+    }\r
+    return msg;\r
+  }\r
+\r
+  public StringMessage queryWaitCMDRecord(){\r
+    ContentResolver pcr = this.cr;\r
+    Uri table = ICContentProvider.PROTOCOL_CMD_RECORDS_URI;\r
+    StringBuilder where = new StringBuilder();\r
+    where.append("FLAG=1");\r
+    ICLogger.i("Query cmdRecords "+where);\r
+    Cursor cmdrecords = pcr.query(table, (String[])null, where.toString(), (String[])null, (String)null);\r
+    StringMessage msg=null;\r
+    if (cmdrecords != null) {\r
+      int score=0;\r
+      if (cmdrecords.getCount()> 0) {\r
+        if (cmdrecords.moveToFirst()) {\r
+          String topic=cmdrecords.getString(cmdrecords.getColumnIndex("TOPIC"));\r
+          String cmd=cmdrecords.getString(cmdrecords.getColumnIndex("CMD"));\r
+          String date=cmdrecords.getString(cmdrecords.getColumnIndex("DATE"));\r
+          String time=cmdrecords.getString(cmdrecords.getColumnIndex("TIME"));\r
+          int flag=cmdrecords.getInt(cmdrecords.getColumnIndex("FLAG"));\r
+          int index=cmdrecords.getInt(cmdrecords.getColumnIndex("_id"));\r
+\r
+          msg=new StringMessage(new String[]{topic});\r
+          msg.refresh(cmd);\r
+          msg.setDate(date,time);\r
+          msg.setSentFlag(flag);\r
+          msg.setIndex(index);\r
+          ICLogger.i("get cmd Record wait response _id "+index + " "+date+time+" topic "+topic+" cmd "+cmd);\r
+\r
+        }\r
+      }\r
+      cmdrecords.close();\r
+\r
+      if (msg==null)\r
+        ICLogger.i("no cmd record in wait status !");\r
+    }\r
+    return msg;\r
+  }\r
+\r
 \r
 \r
 \r
index c92ad15..4be6a7f 100644 (file)
@@ -7,6 +7,7 @@ import com.enqualcomm.support.bean.SleepInfo;
 import com.enqualcomm.support.bean.StringMessage;\r
 import com.enqualcomm.support.utils.Connection;\r
 import com.enqualcomm.support.utils.ICLogger;\r
+import com.enqualcomm.support.utils.TimeUtil;\r
 \r
 \r
 public class protocolAPIHelper {\r
@@ -69,12 +70,13 @@ public class protocolAPIHelper {
     }\r
     public static StringMessage genStringMessage(String cmdName, byte[] rawdata){\r
         StringMessage sm=new StringMessage(new String[]{cmdName,new String(rawdata) });\r
-\r
+        sm.setDate(TimeUtil.getSystemDateYYMMDD(),TimeUtil.getSystemTimeHHmmss());\r
         return sm;\r
     }\r
     public static StringMessage genStringMessage(String cmdName, String msg){\r
         StringMessage sm=new StringMessage(new String[]{cmdName,msg});\r
         sm.refresh(msg);\r
+        sm.setDate(TimeUtil.getSystemDateYYMMDD(),TimeUtil.getSystemTimeHHmmss());\r
         return sm;\r
     }\r
 \r
index 43abd6d..89434b1 100644 (file)
@@ -255,6 +255,7 @@ public class protocol_beehome {
     public static StringMessage genStringMessage(String cmdName, String msg){\r
         StringMessage sm=new StringMessage(new String[]{cmdName,msg});\r
         sm.refresh(msg);\r
+        sm.setDate(TimeUtil.getSystemDateYYMMDD(),TimeUtil.getSystemTimeHHmmss());\r
         return sm;\r
     }\r
     /*\r
index 24a301e..e211033 100644 (file)
@@ -193,6 +193,7 @@ public class protocol_fzd {
     public static StringMessage genStringMessage(String cmdName, String msg){\r
         StringMessage sm=new StringMessage(new String[]{cmdName,msg});\r
         sm.refresh(msg);\r
+        sm.setDate(TimeUtil.getSystemDateYYMMDD(),TimeUtil.getSystemTimeHHmmss());\r
         return sm;\r
     }\r
 \r
index 7492bdf..4b60fc7 100644 (file)
@@ -336,6 +336,7 @@ public class protocol_ic {
     public static StringMessage genStringMessage(String cmdName, String msg){\r
         StringMessage sm=new StringMessage(new String[]{cmdName,msg});\r
         sm.refresh(msg);\r
+        sm.setDate(TimeUtil.getSystemDateYYMMDD(),TimeUtil.getSystemTimeHHmmss());\r
         return sm;\r
     }\r
     /*\r
index 5cd8a82..9b15242 100644 (file)
@@ -248,6 +248,7 @@ public class protocol_jiai {
     public static StringMessage genStringMessage(String cmdName, String msg){\r
         StringMessage sm=new StringMessage(new String[]{cmdName,msg});\r
         sm.refresh(msg);\r
+        sm.setDate(TimeUtil.getSystemDateYYMMDD(),TimeUtil.getSystemTimeHHmmss());\r
         return sm;\r
     }\r
     /*\r
index f2226bc..35f2047 100644 (file)
@@ -127,6 +127,7 @@ public class protocol_mqtt {
     public static StringMessage genStringMessage(String cmdName, String msg) {\r
         StringMessage sm = new StringMessage(new String[]{cmdName, msg});\r
         sm.refresh(msg);\r
+        sm.setDate(TimeUtil.getSystemDateYYMMDD(),TimeUtil.getSystemTimeHHmmss());\r
         return sm;\r
     }\r
 \r
index b8dee78..7e9af6a 100644 (file)
@@ -1,2 +1,2 @@
-#Thu Nov 12 15:31:34 CST 2020\r
-VERSION_CODE=695\r
+#Sat Nov 14 23:02:11 CST 2020\r
+VERSION_CODE=696\r