From aa189bb65bb961a7f725ecaea4b49c0ec1b63678 Mon Sep 17 00:00:00 2001 From: snickersun Date: Mon, 3 Feb 2020 12:42:41 +0800 Subject: [PATCH] =?utf8?q?=E4=BF=AE=E6=94=B9Queue=EF=BC=8C=E9=87=87?= =?utf8?q?=E5=8F=96=E5=90=8C=E6=AD=A5=E9=94=81=E7=9A=84=E6=96=B9=E5=BC=8F?= =?utf8?q?=E8=BF=9B=E8=A1=8C=E4=BF=9D=E6=8A=A4=EF=BC=8C=E8=A7=A3=E5=86=B3?= =?utf8?q?=E4=B9=8B=E5=89=8Dlock=E9=94=81=E6=AD=BB=E9=97=AE=E9=A2=98?= =?utf8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../java/com/ic/protocol/LocationClient.java | 2 +- .../java/com/ic/protocol/service/Deliver.java | 75 +++++++++++++++---- 2 files changed, 63 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/com/ic/protocol/LocationClient.java b/app/src/main/java/com/ic/protocol/LocationClient.java index 6c42132c..ddc37d44 100644 --- a/app/src/main/java/com/ic/protocol/LocationClient.java +++ b/app/src/main/java/com/ic/protocol/LocationClient.java @@ -412,7 +412,7 @@ public void updateCellInfo() { public void onReceive(StringMessage paramStringMessage) { Logger.i("LocationClient onReceive " +paramStringMessage.cmd() ); - Deliver.triggerSendThread(); +// Deliver.triggerSendThread(); //响应定位指令 if ("StartLocate".equals(paramStringMessage.cmd()) ){ forceLocation=1; diff --git a/app/src/main/java/com/ic/protocol/service/Deliver.java b/app/src/main/java/com/ic/protocol/service/Deliver.java index 5883c5a4..aa9a1be9 100644 --- a/app/src/main/java/com/ic/protocol/service/Deliver.java +++ b/app/src/main/java/com/ic/protocol/service/Deliver.java @@ -109,27 +109,76 @@ public class Deliver extends AbstractConnectionService { fileCache = new FileCache(paramRuntime.getFileDir()); initQueue(); } + + private static boolean checkNetwork(){ + boolean ret=true; + int signal=mRuntime.getSignalStrength(); + int networkType=SimSignalUtil.getInstance((mRuntime.getContextProxy()).context).getNetworkType(); + if (signal + 110 < getMinSignalStrength(networkType)) { + Logger.i("Skip Send for SignalStrengh "+(signal + 110 )+" < "+getMinSignalStrength(networkType)); + //如果信号不好,把msg放回去 + ret=false; + } else { + if (connection.isServerConnected() == false || !KeepAlive.isConnected) { + ret=false; + } + } + return ret; + } public static void triggerSendThread(){ if (mRuntime.getUseQueue()) { - mLock.lock(); - try { - mCondition.signal(); - - } finally { - mLock.unlock(); + lock.lock(); + try + { + String str; + //如果没有数据从缓存中尝试读取 + if (queue.isEmpty()) + loadMessage2Queue(); + if (!queue.isEmpty()) { + StringBuilder stringBuilder = new StringBuilder(); + if (checkNetwork()) { + StringMessage stringMessage = queue.poll(); + while (stringMessage != null) { + String cmd = stringMessage.isFromCache(); + stringBuilder.append(cmd); + stringBuilder.append("\n"); + if (checkNetwork()) { + connection.sendMsg(cmd); + stringMessage = queue.poll(); + } else { + //已经拿到的缓存,如果刚巧没有网络,就原路放回去 + ServiceUtil.offerQueue(stringMessage,true); + break; + } + } + } + str = stringBuilder.toString(); + } else { + str = null; + } + Logger.i("send cached cmd: \n"+str); + }finally { + lock.unlock(); } +// mLock.lock(); +// try { +// mCondition.signal(); +// +// } finally { +// mLock.unlock(); +// } } } MyThread2 mythread2=null; private void initQueue(){ - if (mRuntime.getUseQueue()) { - /*启动 阻塞队列buffer 发送县城,随时准备发送buffer的message*/ - if (mythread2 == null) - mythread2 = new MyThread2(this.mCondition, this.mLock); - mythread2.exitthread=false; - mythread2.start(); - } +// if (mRuntime.getUseQueue()) { +// /*启动 阻塞队列buffer 发送县城,随时准备发送buffer的message*/ +// if (mythread2 == null) +// mythread2 = new MyThread2(this.mCondition, this.mLock); +// mythread2.exitthread=false; +// mythread2.start(); +// } } private void deInitQueue(){ -- 2.17.1