From: snickersun Date: Sat, 14 Nov 2020 16:21:24 +0000 (+0800) Subject: release V696 X-Git-Url: http://git.snicker.com.cn/?a=commitdiff_plain;h=b19d4d31997191881fef216552ca32d9e8928c8e;p=protocol_srv.git release V696 把原来的内存中记录缓存协议命令,改为用数据库记录缓存命令,解决重置后缓存数据丢失问题。 --- diff --git a/app/release/ICSer_V695_2011121531_release.apk b/app/release/ICSer_V696_2011142302_release.apk similarity index 78% rename from app/release/ICSer_V695_2011121531_release.apk rename to app/release/ICSer_V696_2011142302_release.apk index 00092351..90d3ea5b 100644 Binary files a/app/release/ICSer_V695_2011121531_release.apk and b/app/release/ICSer_V696_2011142302_release.apk differ diff --git a/app/release/output.json b/app/release/output.json index a4e240b8..17070051 100644 --- a/app/release/output.json +++ b/app/release/output.json @@ -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 diff --git a/app/src/main/java/com/enqualcomm/support/CoreService.java b/app/src/main/java/com/enqualcomm/support/CoreService.java index ac9c1d77..b98263e6 100644 --- a/app/src/main/java/com/enqualcomm/support/CoreService.java +++ b/app/src/main/java/com/enqualcomm/support/CoreService.java @@ -959,6 +959,10 @@ public class CoreService extends Service { //启动结束设置标志位,让心率和体温检测可以正常执行。 server_starting=false; + + //重置缓存中的在等待命令 + Deliver.resetCMDReocrdsDB(); + ReConnectToServer(); } @@ -1277,8 +1281,12 @@ public class CoreService extends Service { // 由于计步接口没有提供设置步数。所以暂时只能清零,不能解决午夜还在运动的情况,会丢失一两次的数据。但是影响不大 runtime.setLastStepCountForBT(0); runtime.setLastStepCount(0); - this.locationClient.updateStepCount(); //重置后马上跟新当前步数为0, 以便及时更新睡眠信息 一分钟内更新的步数可以忽略不记,从而平滑切换 0点reset 计步数据的计算问题 - updateSleepDate();//更新睡眠信息 + //重置后马上跟新当前步数为0, 以便及时更新睡眠信息 一分钟内更新的步数可以忽略不记,从而平滑切换 0点reset 计步数据的计算问题 + this.locationClient.updateStepCount(); + //更新睡眠信息 + updateSleepDate(); + //清除已经发送的历史记录 + runtime.getDbHelper().clearCMDRecordsHaveSent(); setCleanStepCountAlarm(); Config.logBootDate(this);//重置步数的时候,要把开机时间也更新一下,否则第二天 任意时间重启都会造成计步数据清零 return Service.START_STICKY; @@ -1563,8 +1571,8 @@ public class CoreService extends Service { }else { if (retry_connect_count >= retry_connect_max_times) { - ICLogger.i("retry " + retry_connect_count + " 次 >= " + retry_connect_max_times + " ,停止重试!等待下一次心跳再重试!"); no_network_Heartbeats_Count++; + ICLogger.i("retry " + retry_connect_count + " 次 >= " + retry_connect_max_times + " ,停止重试!等待下一次心跳再重试! 已经第"+no_network_Heartbeats_Count+"次心跳都没有连接服务器成功!"); stopConnectionRetryTimer(); } else { diff --git a/app/src/main/java/com/enqualcomm/support/ICContentProvider.java b/app/src/main/java/com/enqualcomm/support/ICContentProvider.java index 7fff74d6..7846f4b1 100644 --- a/app/src/main/java/com/enqualcomm/support/ICContentProvider.java +++ b/app/src/main/java/com/enqualcomm/support/ICContentProvider.java @@ -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"; public static final Uri ALARM_MSG_RECORDS_URI = Uri.parse("content://com.enqualcomm.support/alarmMSG"); + public static final String PROTOCOL_CMD_RECORDS_TABLE_NAME = "PROTOCOL_CMD_RECORDS"; + private static final int PROTOCOL_CMD_RECORDS = 27; + private static final String PROTOCOL_CMD_RECORDS_MIME = "vnd.android.cursor.dir/vnd.com.enqualcomm.support.cmdRecord"; + public static final Uri PROTOCOL_CMD_RECORDS_URI = Uri.parse("content://com.enqualcomm.support/cmdRecord"); private SQLiteDatabase db; @@ -207,6 +211,7 @@ public class ICContentProvider extends ContentProvider { URI_MATCHER.addURI("com.enqualcomm.support", "eventMessage", EVENT_MESSAGE); //24 URI_MATCHER.addURI("com.enqualcomm.support", "sit", SIT); //25 URI_MATCHER.addURI("com.enqualcomm.support", "alarmMSG", ALARM_MSG_RECORDS); //26 + URI_MATCHER.addURI("com.enqualcomm.support", "cmdRecord", PROTOCOL_CMD_RECORDS); //27 } @@ -304,6 +309,10 @@ public class ICContentProvider extends ContentProvider { i = bulkInsertLocale(ALARM_MSG_RECORDS_TABLE_NAME, paramArrayOfContentValues); getContext().getContentResolver().notifyChange(ALARM_MSG_RECORDS_URI, null); break; + case PROTOCOL_CMD_RECORDS: + i = bulkInsertLocale(PROTOCOL_CMD_RECORDS_TABLE_NAME, paramArrayOfContentValues); + getContext().getContentResolver().notifyChange(PROTOCOL_CMD_RECORDS_URI, null); + break; default: break; } @@ -575,6 +584,16 @@ public class ICContentProvider extends ContentProvider { if (j != 0) { getContext().getContentResolver().notifyChange(ALARM_MSG_RECORDS_URI, null); + } + i = j; + break; + case PROTOCOL_CMD_RECORDS: + + j = this.db.delete(PROTOCOL_CMD_RECORDS_TABLE_NAME, whereClause, whereArgs); + + if (j != 0) { + getContext().getContentResolver().notifyChange(PROTOCOL_CMD_RECORDS_URI, null); + } i = j; break; @@ -644,6 +663,8 @@ public class ICContentProvider extends ContentProvider { return SIT_MIME; case ALARM_MSG_RECORDS: return ALARM_MSG_RECORDS_MIME; + case PROTOCOL_CMD_RECORDS: + return PROTOCOL_CMD_RECORDS_MIME; default: return null; } @@ -726,6 +747,10 @@ public class ICContentProvider extends ContentProvider { paramUri = ContentUris.withAppendedId(paramUri, this.db.insert(ALARM_MSG_RECORDS_TABLE_NAME, null, paramContentValues)); getContext().getContentResolver().notifyChange(ALARM_MSG_RECORDS_URI, null); break; + case PROTOCOL_CMD_RECORDS: + paramUri = ContentUris.withAppendedId(paramUri, this.db.insert(PROTOCOL_CMD_RECORDS_TABLE_NAME, null, paramContentValues)); + getContext().getContentResolver().notifyChange(PROTOCOL_CMD_RECORDS_URI, null); + break; default: return null; } @@ -839,6 +864,8 @@ public class ICContentProvider extends ContentProvider { return this.db.query(SIT_TABLE_NAME, columns, paramString1, paramArrayOfString2, null, null, paramString2); case ALARM_MSG_RECORDS: return this.db.query(ALARM_MSG_RECORDS_TABLE_NAME, columns, paramString1, paramArrayOfString2, null, null, paramString2); + case PROTOCOL_CMD_RECORDS: + return this.db.query(PROTOCOL_CMD_RECORDS_TABLE_NAME, columns, paramString1, paramArrayOfString2, null, null, paramString2); default: return null; } @@ -1112,6 +1139,16 @@ public class ICContentProvider extends ContentProvider { i = j; } + break; + case PROTOCOL_CMD_RECORDS: + + j = this.db.update(PROTOCOL_CMD_RECORDS_TABLE_NAME, paramContentValues, whereClause, whereArgs); + i = j; + if (j != 0) { + getContext().getContentResolver().notifyChange(PROTOCOL_CMD_RECORDS_URI, null); + i = j; + } + break; default: break; diff --git a/app/src/main/java/com/enqualcomm/support/ICSmsManager.java b/app/src/main/java/com/enqualcomm/support/ICSmsManager.java index 777f4e34..8db23ce5 100644 --- a/app/src/main/java/com/enqualcomm/support/ICSmsManager.java +++ b/app/src/main/java/com/enqualcomm/support/ICSmsManager.java @@ -24,6 +24,7 @@ import android.widget.Toast; import com.enqualcomm.support.bean.Contact; import com.enqualcomm.support.bean.ICLocation; import com.enqualcomm.support.bean.Runtime; +import com.enqualcomm.support.bean.StringMessage; import com.enqualcomm.support.service.AudioService; import com.enqualcomm.support.service.Deliver; import com.enqualcomm.support.service.SmsDatabaseChaneObserver; @@ -1212,6 +1213,50 @@ public class ICSmsManager extends BroadcastReceiver { Deliver.sendLocationMSG(protocolAPIHelper.getLBSLocationMSG(runtime)); } + }else if(cmd.startsWith("testCMDRecords")) { + + if(CoreService.getInstance()!=null){ + StringMessage msg=protocolAPIHelper.getLBSLocationMSG(runtime); + runtime.getDbHelper().insertCMDRecord(msg); + Deliver.dumpMessage(msg); + Util.mSleep(2000); + msg=protocolAPIHelper.getLBSLocationMSG(runtime); + runtime.getDbHelper().insertCMDRecord(msg); + Deliver.dumpMessage(msg); + Util.mSleep(2000); + msg=protocolAPIHelper.getLBSLocationMSG(runtime); + runtime.getDbHelper().insertCMDRecord(msg); + Deliver.dumpMessage(msg); + + Deliver.triggerSendThread(); + /* + msg=runtime.getDbHelper().queryNotSentCMDRecord(); + Deliver.dumpMessage(msg); + runtime.getDbHelper().updateCMDRecord(msg.getIndex(),1); + msg=runtime.getDbHelper().queryWaitCMDRecord(); + Deliver.dumpMessage(msg); + runtime.getDbHelper().updateCMDRecord(msg.getIndex(),2); + Deliver.dumpMessage(msg); + + msg=runtime.getDbHelper().queryNotSentCMDRecord(); + Deliver.dumpMessage(msg); + runtime.getDbHelper().updateCMDRecord(msg.getIndex(),1); + msg=runtime.getDbHelper().queryWaitCMDRecord(); + Deliver.dumpMessage(msg); + runtime.getDbHelper().updateCMDRecord(msg.getIndex(),2); + Deliver.dumpMessage(msg); + + msg=runtime.getDbHelper().queryNotSentCMDRecord(); + Deliver.dumpMessage(msg); + runtime.getDbHelper().updateCMDRecord(msg.getIndex(),1); + msg=runtime.getDbHelper().queryWaitCMDRecord(); + Deliver.dumpMessage(msg); + runtime.getDbHelper().updateCMDRecord(msg.getIndex(),2); + Deliver.dumpMessage(msg); +*/ + + } + } } } \ No newline at end of file diff --git a/app/src/main/java/com/enqualcomm/support/MySqlitOpenHelper.java b/app/src/main/java/com/enqualcomm/support/MySqlitOpenHelper.java index 06bbaa74..3f4d72f9 100644 --- a/app/src/main/java/com/enqualcomm/support/MySqlitOpenHelper.java +++ b/app/src/main/java/com/enqualcomm/support/MySqlitOpenHelper.java @@ -8,7 +8,7 @@ import com.enqualcomm.support.utils.ICLogger; public class MySqlitOpenHelper extends SQLiteOpenHelper { - private static int dbVersion=9; + private static int dbVersion=10; public MySqlitOpenHelper(Context paramContext) { super(paramContext, "data", null, dbVersion); } public void onCreate(SQLiteDatabase sqlite) { @@ -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)"); sqlite.execSQL("CREATE TABLE STHEART_RATE(_id INTEGER PRIMARY KEY AUTOINCREMENT ,START_TIME TEXT ,END_TIME TEXT ,WEEK TEXT ,STATUS TEXT,INTERVAL TEXT)"); sqlite.execSQL("CREATE TABLE UNREADMSG(_id INTEGER PRIMARY KEY AUTOINCREMENT ,CATEGORY INTEGER ,ID TEXT ,COUNT INTEGER,RECVTIME INTEGER)"); + create_tables(sqlite); +} + + private void create_tables(SQLiteDatabase sqlite){ - /* + /* 系统对话消息表,包含微聊,系统推送文本,上传图片,上传语音等一系列消息。 Pushtxt、message 数据库 Message,记录所有message,包括类型(下发txt,chat msg, chat image),文件url或者文本内容。 @@ -45,7 +49,7 @@ Pushtxt、message 2个数据库,时间段和当前状态记录(包括历史记录)。 */ sqlite.execSQL("CREATE TABLE ANTIOFF(_id INTEGER PRIMARY KEY AUTOINCREMENT ,START_TIME TEXT ,END_TIME TEXT ,WEEK TEXT ,STATUS TEXT,CUR_SYS_STATUS TEXT)"); - // sqlite.execSQL("CREATE TABLE ANTIOFF_RECORDS(_id INTEGER PRIMARY KEY AUTOINCREMENT ,TIME TEXT ,STATUS TEXT,CUR_SYS_STATUS TEXT)"); + // sqlite.execSQL("CREATE TABLE ANTIOFF_RECORDS(_id INTEGER PRIMARY KEY AUTOINCREMENT ,TIME TEXT ,STATUS TEXT,CUR_SYS_STATUS TEXT)"); /* 睡眠 @@ -65,10 +69,14 @@ Pushtxt、message /*所有报警的记录表,包括开关机事件*/ sqlite.execSQL("CREATE TABLE ALARM_MSG_RECORDS(_id INTEGER PRIMARY KEY AUTOINCREMENT ,DATE TEXT, TIME TEXT ,ALARM TEXT )"); + + /*缓存协议记录*/ + sqlite.execSQL("CREATE TABLE PROTOCOL_CMD_RECORDS(_id INTEGER PRIMARY KEY AUTOINCREMENT , FLAG INTEGER, DATE TEXT, TIME TEXT ,TOPIC TEXT,CMD TEXT )"); + } public void onUpgrade(SQLiteDatabase sqlite, int oldDBversion, int newDBversion) { - if (oldDBversion bs; - + + //目前作为消息主体,除了mqtt协议还需要一个topic(fragments[0]) , 其他协议就是要发送的内容本身。 private String cache; - + + //数据库中的index + private int index=-1; + + //命令日期 + private String date=null; + + //命令时间 + private String time=null; + //mqtt协议中第一条就是 topic,其他协议中就是cmdname或者无用 protected String[] fragments; - - public boolean u8; - + + //发送标志(表示已经接收到服务器返回消息) , 0 未发送, 1 发送等回复, 2 已回复 + private int sentFlag; + + //除mqtt协议可以使用 public StringMessage(String paramString) { this.cache = paramString; - this.u8 = true; + this.sentFlag = 0; + } + + public String getDate(){ + return date; } - - public StringMessage(String[] paramArrayOfString) { this(paramArrayOfString, true); } - + + public String getTime(){ + return time; + } + + public int getIndex(){ + return index; + } + + public void setIndex(int i){ + index=i; + } + + public void setDate(String date1,String time1){ + date=date1; + time=time1; + } + //mqtt协议使用 设置topic + public StringMessage(String[] paramArrayOfString) { this(paramArrayOfString, 0); } + + + //暂时未用,二进制数据备用 public StringMessage(String[] paramArrayOfString, ArrayList paramArrayList) { this.fragments = paramArrayOfString; this.bs = paramArrayList; + this.sentFlag=0; } - - public StringMessage(String[] paramArrayOfString, boolean paramBoolean) { + + //mqtt协议使用,设置topic 以及 发送标志 + public StringMessage(String[] paramArrayOfString, int paramBoolean) { this.fragments = paramArrayOfString; - this.u8 = paramBoolean; + this.sentFlag = paramBoolean; + } + + //设置发送flag + public void setSentFlag(int f){ + sentFlag=f; + } + + //获取发送flag + public int haveSent(){ + return sentFlag; } - + + //未用 public String[] all() { return this.fragments; } - + + //获取topic内容 public String cmd() { return this.fragments[0]; } - + + //获取协议消息主体内容 public String isFromCache() { return this.cache; } - + + //更新协议消息主体内容 public void refresh(String paramString) { this.cache = paramString; } - + + //未用 public int size() { return (this.fragments != null) ? this.fragments.length : 0; } - + + //未用 public ArrayList source() { return this.bs; } } diff --git a/app/src/main/java/com/enqualcomm/support/service/Deliver.java b/app/src/main/java/com/enqualcomm/support/service/Deliver.java index b43025de..09826c3a 100644 --- a/app/src/main/java/com/enqualcomm/support/service/Deliver.java +++ b/app/src/main/java/com/enqualcomm/support/service/Deliver.java @@ -20,6 +20,7 @@ import com.enqualcomm.support.Constants; import com.enqualcomm.support.CoreService; import com.enqualcomm.support.R; import com.enqualcomm.support.bean.VoiceContent; +import com.enqualcomm.support.utils.DBHelper; import com.enqualcomm.support.utils.TemperatureUtil; import com.enqualcomm.support.utils.TimeUtil; import com.ic.protocols.protocolAPIHelper; @@ -150,7 +151,6 @@ public class Deliver extends AbstractConnectionService { } private static boolean NeedCheckServerResponse=true; private static boolean ServerResponsed=false; - private static StringMessage needCheckResponseCMD=null; private static int CheckCount=0; private static void checkNeedServerResponse(StringMessage cmd){ @@ -162,7 +162,17 @@ public class Deliver extends AbstractConnectionService { NeedCheckServerResponse=true; } } - + public static void dumpMessage(StringMessage msg){ + StringBuilder sb = new StringBuilder("StringMessage "); + if (msg!=null) { + sb.append("index ").append(msg.getIndex()) + .append("\nDate ").append(msg.getDate()).append(msg.getTime()) + .append("\nflag ").append(msg.haveSent()) + .append("\ntopic ").append(msg.cmd()) + .append("\ncmd ").append(msg.isFromCache()).append("\n"); + } + ICLogger.i(sb.toString()); + } public static boolean getAndSendMsgFromQueue(){ boolean ret=false; if (mRuntime.getUseQueue()) { @@ -177,65 +187,64 @@ public class Deliver extends AbstractConnectionService { // loadMessage2Queue(); //检查刚刚发送出去的包是否需要检查server response - checkNeedServerResponse(needCheckResponseCMD); + + StringMessage msgWait=mRuntime.getDbHelper().queryWaitCMDRecord(); + dumpMessage(msgWait); + checkNeedServerResponse(msgWait); //如果需要,且没有服务器反馈 - if (NeedCheckServerResponse==true && ServerResponsed==false){ + if (NeedCheckServerResponse==true && ServerResponsed==false) { //刚刚发送的包不为空,且检测次数小于3,则保留数据,进行下一次重试。 -// if (needCheckResponseCMD!=null && CheckCount < 3) { - if (needCheckResponseCMD!=null ) { //一直检测 是否服务器收到。 - //如果cmd有效,且尝试次数小于3, 没有收到反馈的情况下,可以重新插入queue进行下一次尝试! - ICLogger.i("checkSrvResponse "+CheckCount+" times for "+needCheckResponseCMD.cmd()+ " "+needCheckResponseCMD.isFromCache()); - if (!ServiceUtil.offerQueue(needCheckResponseCMD, true)) { - ICLogger.i("checkSrvResponse failed ,重新添加MessageQueue 已满,数据将被丢弃!" + needCheckResponseCMD.cmd()+ " "+needCheckResponseCMD.isFromCache()); - if (Config.LOG_TOFILE) - ICLogger.logToFile("APILog", "response failed queueFullskip! " + needCheckResponseCMD.cmd()+ " "+needCheckResponseCMD.isFromCache()); - }else{ - if (Config.LOG_TOFILE) - ICLogger.logToFile("APILog", "response failed retry ! " +CheckCount+" " + needCheckResponseCMD.cmd()+ " "+needCheckResponseCMD.isFromCache()); - } - CheckCount++; - //尝试次数大于5 ,可能是还没有发送过数据,或者超过重试次数,暂停提取queue中数据进,下次心跳再开始发送 - if (CheckCount>5){ - ICLogger.i("checkSrvResponse CheckCount="+CheckCount+" Timeout or cmd is null, skip "); - if (Config.LOG_TOFILE) - ICLogger.logToFile("APILog", "response timeout skip! " ); - CheckCount=0; - if(mLock!=null && mLock.isLocked()) - mLock.unlock(); - return false; - } + //如果cmd有效,且尝试次数小于3, 没有收到反馈的情况下,可以重新插入queue进行下一次尝试! + ICLogger.i("checkSrvResponse " + CheckCount + " times for " + msgWait.cmd() + " " + msgWait.isFromCache()); + if (msgWait.getIndex() >= 0) + mRuntime.getDbHelper().updateCMDRecord(msgWait.getIndex(), 0); + dumpMessage(msgWait); + CheckCount++; + //尝试次数大于5 ,可能是还没有发送过数据,或者超过重试次数,暂停提取queue中数据进,下次心跳再开始发送 + if (CheckCount > 5) { + ICLogger.i("checkSrvResponse CheckCount=" + CheckCount + " Timeout or cmd is null, skip "); + if (Config.LOG_TOFILE) + ICLogger.logToFile("APILog", "response timeout skip! "); + CheckCount = 0; + if (mLock != null && mLock.isLocked()) + mLock.unlock(); + return false; } + } - if (!queue.isEmpty()) { StringBuilder stringBuilder = new StringBuilder(); if (checkNetwork()) { - StringMessage stringMessage = queue.poll(); - if (stringMessage != null) { - String cmd = stringMessage.isFromCache(); - String topic = stringMessage.cmd(); + StringMessage msgSent=mRuntime.getDbHelper().queryNotSentCMDRecord(); + dumpMessage(msgSent); + if (msgSent != null) { + String cmd = msgSent.isFromCache(); + String topic = msgSent.cmd(); stringBuilder.append(topic); stringBuilder.append(" "); stringBuilder.append(cmd); stringBuilder.append("\n"); if (checkNetwork()) { - connection.send(stringMessage); -// stringMessage = queue.poll(); - needCheckResponseCMD=stringMessage; + + connection.send(msgSent); //如果需要Check if (NeedCheckServerResponse==true){ ICLogger.i("checkSrvResponse "+topic+" "+cmd); ServerResponsed=false; + mRuntime.getDbHelper().updateCMDRecord(msgSent.getIndex(),1); + }else{ + ICLogger.i("no need checkSrvResponse "+topic+" "+cmd); + ServerResponsed=false; + mRuntime.getDbHelper().updateCMDRecord(msgSent.getIndex(),2); } ret=true; } else { //已经拿到的缓存,如果刚巧没有网络,就原路放回去 ICLogger.i("网络不通,不能发送!"); - if (!ServiceUtil.offerQueue(stringMessage,true)){ - ICLogger.i("MessageQueue 已满,数据将被丢弃!"+ stringMessage); - if (Config.LOG_TOFILE) ICLogger.logToFile( "APILog", " queueFullskip! " + stringMessage); - } + if (msgWait.getIndex() >= 0) + mRuntime.getDbHelper().updateCMDRecord(msgSent.getIndex(), 0); + dumpMessage(msgWait); ret=false; } }else{ @@ -243,11 +252,8 @@ public class Deliver extends AbstractConnectionService { } } str = stringBuilder.toString(); - } else { - str = "no message!\n"; - } ICLogger.i("send cached cmd : \n"+str); - ICLogger.i("\n"+queue.size()+" left in Queue!"); + //ICLogger.i("\n"+queue.size()+" left in Queue!"); }finally { if(mLock!=null && mLock.isLocked()) mLock.unlock(); @@ -256,7 +262,13 @@ public class Deliver extends AbstractConnectionService { return ret; } - + public static void resetCMDReocrdsDB(){ + //正常应该只有一个在wait的记录,如果开机的时候,可能需要处理一下第一条记录 + StringMessage msgWait=mRuntime.getDbHelper().queryWaitCMDRecord(); + dumpMessage(msgWait); + if (msgWait!=null) + mRuntime.getDbHelper().updateCMDRecord(msgWait.getIndex(),0); + } public static void sendLocationMSG( String Msg){ if(Msg==null ||Msg.trim().isEmpty()){ @@ -272,14 +284,10 @@ public class Deliver extends AbstractConnectionService { } if(mRuntime.getUseQueue()){ - if(!ServiceUtil.offerQueue(Msg)) { - ICLogger.i(" MessageQueue 已满,数据将被丢弃," + Msg.cmd()+" "+Msg.isFromCache()); - if (Config.LOG_TOFILE)ICLogger.logToFile( "APILog", " queueFullskip " + Msg.cmd()+" "+Msg.isFromCache()); - }else{ - if (Config.LOG_TOFILE)ICLogger.logToFile( "APILog", " queueCMD " + Msg.cmd()+" "+Msg.isFromCache()); - } -// if(queue.size()>5) //测试queue 发送逻辑用 - triggerSendThread(); + long id=mRuntime.getDbHelper().insertCMDRecord(Msg); + Msg.setIndex((int)id); + dumpMessage(Msg); + triggerSendThread(); }else { if (checkNetwork()) { ICLogger.i(" first send " + Msg); @@ -354,10 +362,12 @@ public class Deliver extends AbstractConnectionService { //如果需要检测是否响应。 if (NeedCheckServerResponse==true){ - if(needCheckResponseCMD!=null) { - ICLogger.i("====== checkSrvResponse cmd "+cmd+" msg "+protocolAPIHelper.isCmdStr (needCheckResponseCMD)); - if( cmd.equals(protocolAPIHelper.isCmdStr (needCheckResponseCMD))){ - ICLogger.i("checkSrvResponse "+cmd+" "+protocolAPIHelper.isCmdStr (needCheckResponseCMD)+" is responsed!"); + StringMessage msgWait=mRuntime.getDbHelper().queryWaitCMDRecord(); + dumpMessage(msgWait); + if(msgWait!=null) { + ICLogger.i("====== checkSrvResponse cmd "+cmd+" msg "+protocolAPIHelper.isCmdStr (msgWait)); + if( cmd.equals(protocolAPIHelper.isCmdStr (msgWait))){ + ICLogger.i("checkSrvResponse "+cmd+" "+protocolAPIHelper.isCmdStr (msgWait)+" is responsed!"); ServerResponsed=true; CheckCount=0; } @@ -591,6 +601,7 @@ public class Deliver extends AbstractConnectionService { } + private void playVoice(Context paramContext,String voicefile) { AudioService.getInstance().play(voicefile); } diff --git a/app/src/main/java/com/enqualcomm/support/utils/DBHelper.java b/app/src/main/java/com/enqualcomm/support/utils/DBHelper.java index f177850b..bffb700f 100644 --- a/app/src/main/java/com/enqualcomm/support/utils/DBHelper.java +++ b/app/src/main/java/com/enqualcomm/support/utils/DBHelper.java @@ -30,6 +30,7 @@ import com.enqualcomm.support.bean.Silent; import com.enqualcomm.support.bean.SleepInfo; import com.enqualcomm.support.bean.SleepRecord; import com.enqualcomm.support.bean.StheartRate; +import com.enqualcomm.support.bean.StringMessage; import com.enqualcomm.support.bean.Weather; import java.util.ArrayList; @@ -1005,6 +1006,117 @@ public class DBHelper { } +//sqlite.execSQL("CREATE TABLE PROTOCOL_CMD_RECORDS(_id INTEGER PRIMARY KEY AUTOINCREMENT , FLAG INTEGER, DATE TEXT, TIME TEXT ,TOPIC TEXT,CMD TEXT )"); + + public long insertCMDRecord(StringMessage msg){ + ContentValues values = new ContentValues(); + values.put("FLAG",msg.haveSent()); + if(msg.getDate()==null || msg.getTime()==null) + msg.setDate(TimeUtil.getSystemDateYYMMDD(),TimeUtil.getSystemTimeHHmmss()); + values.put("DATE",msg.getDate()); + values.put("TIME",msg.getTime()); + values.put("TOPIC",msg.cmd()); + values.put("CMD",msg.isFromCache()); + long raw_contactID = ContentUris.parseId(cr.insert(ICContentProvider.PROTOCOL_CMD_RECORDS_URI, values)); + + return raw_contactID; + } + + + // + public void updateCMDRecord(int id, int flag){ + + String WhereClause=null; + if (id>=0) { + WhereClause=new StringBuilder("_id=").append(id).toString(); + + ContentValues flagcontent = new ContentValues(); + flagcontent.put("FLAG", flag); + this.cr.update(ICContentProvider.PROTOCOL_CMD_RECORDS_URI, flagcontent, WhereClause, (String[])null); + } + } + + public void clearCMDRecordsHaveSent(){ + ContentResolver pcr = this.cr; + Uri table = ICContentProvider.PROTOCOL_CMD_RECORDS_URI; + StringBuilder where = new StringBuilder(); + where.append("FLAG=2"); + ICLogger.i("delete cmdRecords have sent "); + pcr.delete(table, where.toString(), (String[])null); + } + + public StringMessage queryNotSentCMDRecord(){ + ContentResolver pcr = this.cr; + Uri table = ICContentProvider.PROTOCOL_CMD_RECORDS_URI; + StringBuilder where = new StringBuilder(); + where.append("FLAG=0"); + ICLogger.i("Query cmdRecords "+where); + Cursor cmdrecords = pcr.query(table, (String[])null, where.toString(), (String[])null, (String)null); + StringMessage msg=null; + if (cmdrecords != null) { + int score=0; + if (cmdrecords.getCount()> 0) { + if (cmdrecords.moveToFirst()) { + String topic=cmdrecords.getString(cmdrecords.getColumnIndex("TOPIC")); + String cmd=cmdrecords.getString(cmdrecords.getColumnIndex("CMD")); + String date=cmdrecords.getString(cmdrecords.getColumnIndex("DATE")); + String time=cmdrecords.getString(cmdrecords.getColumnIndex("TIME")); + int flag=cmdrecords.getInt(cmdrecords.getColumnIndex("FLAG")); + int index=cmdrecords.getInt(cmdrecords.getColumnIndex("_id")); + + msg=new StringMessage(new String[]{topic}); + msg.refresh(cmd); + msg.setDate(date,time); + msg.setSentFlag(flag); + msg.setIndex(index); + ICLogger.i("get cmd Record not sent response _id "+index + " "+date+time+" topic "+topic+" cmd "+cmd); + + } + } + cmdrecords.close(); + + if (msg==null) + ICLogger.i("no cmd record in not sent status !"); + } + return msg; + } + + public StringMessage queryWaitCMDRecord(){ + ContentResolver pcr = this.cr; + Uri table = ICContentProvider.PROTOCOL_CMD_RECORDS_URI; + StringBuilder where = new StringBuilder(); + where.append("FLAG=1"); + ICLogger.i("Query cmdRecords "+where); + Cursor cmdrecords = pcr.query(table, (String[])null, where.toString(), (String[])null, (String)null); + StringMessage msg=null; + if (cmdrecords != null) { + int score=0; + if (cmdrecords.getCount()> 0) { + if (cmdrecords.moveToFirst()) { + String topic=cmdrecords.getString(cmdrecords.getColumnIndex("TOPIC")); + String cmd=cmdrecords.getString(cmdrecords.getColumnIndex("CMD")); + String date=cmdrecords.getString(cmdrecords.getColumnIndex("DATE")); + String time=cmdrecords.getString(cmdrecords.getColumnIndex("TIME")); + int flag=cmdrecords.getInt(cmdrecords.getColumnIndex("FLAG")); + int index=cmdrecords.getInt(cmdrecords.getColumnIndex("_id")); + + msg=new StringMessage(new String[]{topic}); + msg.refresh(cmd); + msg.setDate(date,time); + msg.setSentFlag(flag); + msg.setIndex(index); + ICLogger.i("get cmd Record wait response _id "+index + " "+date+time+" topic "+topic+" cmd "+cmd); + + } + } + cmdrecords.close(); + + if (msg==null) + ICLogger.i("no cmd record in wait status !"); + } + return msg; + } + diff --git a/app/src/main/java/com/ic/protocols/protocolAPIHelper.java b/app/src/main/java/com/ic/protocols/protocolAPIHelper.java index c92ad15d..4be6a7fc 100644 --- a/app/src/main/java/com/ic/protocols/protocolAPIHelper.java +++ b/app/src/main/java/com/ic/protocols/protocolAPIHelper.java @@ -7,6 +7,7 @@ import com.enqualcomm.support.bean.SleepInfo; import com.enqualcomm.support.bean.StringMessage; import com.enqualcomm.support.utils.Connection; import com.enqualcomm.support.utils.ICLogger; +import com.enqualcomm.support.utils.TimeUtil; public class protocolAPIHelper { @@ -69,12 +70,13 @@ public class protocolAPIHelper { } public static StringMessage genStringMessage(String cmdName, byte[] rawdata){ StringMessage sm=new StringMessage(new String[]{cmdName,new String(rawdata) }); - + sm.setDate(TimeUtil.getSystemDateYYMMDD(),TimeUtil.getSystemTimeHHmmss()); return sm; } public static StringMessage genStringMessage(String cmdName, String msg){ StringMessage sm=new StringMessage(new String[]{cmdName,msg}); sm.refresh(msg); + sm.setDate(TimeUtil.getSystemDateYYMMDD(),TimeUtil.getSystemTimeHHmmss()); return sm; } diff --git a/app/src/main/java/com/ic/protocols/protocol_beehome.java b/app/src/main/java/com/ic/protocols/protocol_beehome.java index 43abd6d3..89434b10 100644 --- a/app/src/main/java/com/ic/protocols/protocol_beehome.java +++ b/app/src/main/java/com/ic/protocols/protocol_beehome.java @@ -255,6 +255,7 @@ public class protocol_beehome { public static StringMessage genStringMessage(String cmdName, String msg){ StringMessage sm=new StringMessage(new String[]{cmdName,msg}); sm.refresh(msg); + sm.setDate(TimeUtil.getSystemDateYYMMDD(),TimeUtil.getSystemTimeHHmmss()); return sm; } /* diff --git a/app/src/main/java/com/ic/protocols/protocol_fzd.java b/app/src/main/java/com/ic/protocols/protocol_fzd.java index 24a301e3..e2110337 100644 --- a/app/src/main/java/com/ic/protocols/protocol_fzd.java +++ b/app/src/main/java/com/ic/protocols/protocol_fzd.java @@ -193,6 +193,7 @@ public class protocol_fzd { public static StringMessage genStringMessage(String cmdName, String msg){ StringMessage sm=new StringMessage(new String[]{cmdName,msg}); sm.refresh(msg); + sm.setDate(TimeUtil.getSystemDateYYMMDD(),TimeUtil.getSystemTimeHHmmss()); return sm; } diff --git a/app/src/main/java/com/ic/protocols/protocol_ic.java b/app/src/main/java/com/ic/protocols/protocol_ic.java index 7492bdf7..4b60fc7d 100644 --- a/app/src/main/java/com/ic/protocols/protocol_ic.java +++ b/app/src/main/java/com/ic/protocols/protocol_ic.java @@ -336,6 +336,7 @@ public class protocol_ic { public static StringMessage genStringMessage(String cmdName, String msg){ StringMessage sm=new StringMessage(new String[]{cmdName,msg}); sm.refresh(msg); + sm.setDate(TimeUtil.getSystemDateYYMMDD(),TimeUtil.getSystemTimeHHmmss()); return sm; } /* diff --git a/app/src/main/java/com/ic/protocols/protocol_jiai.java b/app/src/main/java/com/ic/protocols/protocol_jiai.java index 5cd8a828..9b15242a 100644 --- a/app/src/main/java/com/ic/protocols/protocol_jiai.java +++ b/app/src/main/java/com/ic/protocols/protocol_jiai.java @@ -248,6 +248,7 @@ public class protocol_jiai { public static StringMessage genStringMessage(String cmdName, String msg){ StringMessage sm=new StringMessage(new String[]{cmdName,msg}); sm.refresh(msg); + sm.setDate(TimeUtil.getSystemDateYYMMDD(),TimeUtil.getSystemTimeHHmmss()); return sm; } /* diff --git a/app/src/main/java/com/ic/protocols/protocol_mqtt.java b/app/src/main/java/com/ic/protocols/protocol_mqtt.java index f2226bc1..35f2047d 100644 --- a/app/src/main/java/com/ic/protocols/protocol_mqtt.java +++ b/app/src/main/java/com/ic/protocols/protocol_mqtt.java @@ -127,6 +127,7 @@ public class protocol_mqtt { public static StringMessage genStringMessage(String cmdName, String msg) { StringMessage sm = new StringMessage(new String[]{cmdName, msg}); sm.refresh(msg); + sm.setDate(TimeUtil.getSystemDateYYMMDD(),TimeUtil.getSystemTimeHHmmss()); return sm; } diff --git a/app/version_code.properties b/app/version_code.properties index b8dee782..7e9af6a1 100644 --- a/app/version_code.properties +++ b/app/version_code.properties @@ -1,2 +1,2 @@ -#Thu Nov 12 15:31:34 CST 2020 -VERSION_CODE=695 +#Sat Nov 14 23:02:11 CST 2020 +VERSION_CODE=696