fileCache = new FileCache(paramRuntime.getFileDir());\r
initQueue();\r
}\r
+\r
+ private static boolean checkNetwork(){\r
+ boolean ret=true;\r
+ int signal=mRuntime.getSignalStrength();\r
+ int networkType=SimSignalUtil.getInstance((mRuntime.getContextProxy()).context).getNetworkType();\r
+ if (signal + 110 < getMinSignalStrength(networkType)) {\r
+ Logger.i("Skip Send for SignalStrengh "+(signal + 110 )+" < "+getMinSignalStrength(networkType));\r
+ //如果信号不好,把msg放回去\r
+ ret=false;\r
+ } else {\r
+ if (connection.isServerConnected() == false || !KeepAlive.isConnected) {\r
+ ret=false;\r
+ }\r
+ }\r
+ return ret;\r
+ }\r
public static void triggerSendThread(){\r
if (mRuntime.getUseQueue()) {\r
- mLock.lock();\r
- try {\r
- mCondition.signal();\r
-\r
- } finally {\r
- mLock.unlock();\r
+ lock.lock();\r
+ try\r
+ {\r
+ String str;\r
+ //如果没有数据从缓存中尝试读取\r
+ if (queue.isEmpty())\r
+ loadMessage2Queue();\r
+ if (!queue.isEmpty()) {\r
+ StringBuilder stringBuilder = new StringBuilder();\r
+ if (checkNetwork()) {\r
+ StringMessage stringMessage = queue.poll();\r
+ while (stringMessage != null) {\r
+ String cmd = stringMessage.isFromCache();\r
+ stringBuilder.append(cmd);\r
+ stringBuilder.append("\n");\r
+ if (checkNetwork()) {\r
+ connection.sendMsg(cmd);\r
+ stringMessage = queue.poll();\r
+ } else {\r
+ //已经拿到的缓存,如果刚巧没有网络,就原路放回去\r
+ ServiceUtil.offerQueue(stringMessage,true);\r
+ break;\r
+ }\r
+ }\r
+ }\r
+ str = stringBuilder.toString();\r
+ } else {\r
+ str = null;\r
+ }\r
+ Logger.i("send cached cmd: \n"+str);\r
+ }finally {\r
+ lock.unlock();\r
}\r
+// mLock.lock();\r
+// try {\r
+// mCondition.signal();\r
+//\r
+// } finally {\r
+// mLock.unlock();\r
+// }\r
}\r
}\r
MyThread2 mythread2=null;\r
\r
private void initQueue(){\r
- if (mRuntime.getUseQueue()) {\r
- /*启动 阻塞队列buffer 发送县城,随时准备发送buffer的message*/\r
- if (mythread2 == null)\r
- mythread2 = new MyThread2(this.mCondition, this.mLock);\r
- mythread2.exitthread=false;\r
- mythread2.start();\r
- }\r
+// if (mRuntime.getUseQueue()) {\r
+// /*启动 阻塞队列buffer 发送县城,随时准备发送buffer的message*/\r
+// if (mythread2 == null)\r
+// mythread2 = new MyThread2(this.mCondition, this.mLock);\r
+// mythread2.exitthread=false;\r
+// mythread2.start();\r
+// }\r
}\r
\r
private void deInitQueue(){\r