diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/MainActivity.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/MainActivity.java
index 1ba98d69a3..42b4d0f7fc 100644
--- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/MainActivity.java
+++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/MainActivity.java
@@ -78,6 +78,7 @@ import com.zhidao.adas.client.bean.Warn;
import com.zhidao.adas.client.log.ConnectStatusSave;
import com.zhidao.adas.client.log.LogSave;
import com.zhidao.adas.client.utils.Constants;
+import com.zhidao.adas.client.utils.PreferencesUtils;
import com.zhidao.support.adas.high.AdasManager;
import com.zhidao.support.adas.high.AdasOptions;
import com.zhidao.support.adas.high.OnAdasConnectStatusListener;
@@ -194,6 +195,7 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas
onUpdateConnectStateView();
showIPCIP();
canDrawOverlays();
+ showHint();
// PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);
// wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG);
// wakeLock.acquire();
@@ -209,6 +211,28 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas
// wifiLock.acquire();
}
+ private void showHint() {
+ boolean isShowHint = PreferencesUtils.getBoolean(this, "show_hint", true);
+ if (isShowHint) {
+ new AlertDialog.Builder(this)
+ .setTitle("警告")
+ .setMessage("本应用运行时会影响鹰眼司机、乘客端的连接。\n使用完成后请彻底杀掉本应用并重启鹰眼")
+ .setNegativeButton("不再提示",
+ new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ dialog.cancel();
+ PreferencesUtils.putBoolean(MainActivity.this, "show_hint", false);
+ }
+ })
+ .setPositiveButton("知道了",
+ new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int whichButton) {
+ }
+ }).show();
+ }
+ }
+
@Override
protected void onDestroy() {
super.onDestroy();
@@ -536,7 +560,7 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas
});
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
- String str = "后台运行:" + (BackgrounderPermission.getInstance().isPermissionLongBackgroundRunning(this) ? "已优化" : "未优化");
+ String str = "后台运行:" + (BackgrounderPermission.getInstance().isPermissionLongBackgroundRunning(this) ? "已优化" : "未优化");
background.setText(Html.fromHtml(str, Html.FROM_HTML_MODE_LEGACY));
background.setOnClickListener(new View.OnClickListener() {
@Override
@@ -547,7 +571,7 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas
BackgrounderPermission.getInstance().setListener(new OnAdasPermissionListener() {
@Override
public void onBackgrounderPermission(boolean isAllow) {
- String str = "后台运行:" + (isAllow ? "已优化" : "未优化");
+ String str = "后台运行:" + (isAllow ? "已优化" : "未优化");
background.setText(Html.fromHtml(str, Html.FROM_HTML_MODE_LEGACY));
}
});
diff --git a/libraries/mogo-adas-other/src/main/res/layout/dialog_adas_permission_long_background_running.xml b/libraries/mogo-adas-other/src/main/res/layout/dialog_adas_permission_long_background_running.xml
index aa99da50a1..33d71621f4 100644
--- a/libraries/mogo-adas-other/src/main/res/layout/dialog_adas_permission_long_background_running.xml
+++ b/libraries/mogo-adas-other/src/main/res/layout/dialog_adas_permission_long_background_running.xml
@@ -29,7 +29,7 @@
\ No newline at end of file
diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/ReconnectManager.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/ReconnectManager.java
new file mode 100644
index 0000000000..1431b08472
--- /dev/null
+++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/ReconnectManager.java
@@ -0,0 +1,64 @@
+package com.zhidao.support.adas.high.common;
+
+import java.util.Timer;
+import java.util.TimerTask;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+/**
+ * 重连管理器
+ */
+public class ReconnectManager {
+ private static final String TAG = ReconnectManager.class.getSimpleName();
+ private static final long RECONNECT_INTERVAL = 4 * 1000L;//重连间隔
+ private final AtomicBoolean isReconnection = new AtomicBoolean(false);//是否正在重连
+ private final OnReconnectListener listener;
+ private volatile Timer timer;
+
+ public interface OnReconnectListener {
+ void onReconnection();
+ }
+
+
+ public ReconnectManager(OnReconnectListener listener) {
+ this.listener = listener;
+
+ }
+
+ /**
+ * @return 是否正在重连
+ */
+ public boolean isReconnection() {
+ return isReconnection.get();
+ }
+
+
+ public synchronized void start() {
+ if (!isReconnection.get()) {
+ CupidLogUtils.i(TAG, "开始重连");
+ isReconnection.set(true);
+ if (timer == null) {
+ timer = new Timer();
+ timer.schedule(new TimerTask() {
+ @Override
+ public void run() {
+ if (isReconnection.get()) {
+ if (listener != null)
+ listener.onReconnection();
+ }
+ }
+ }, 0, RECONNECT_INTERVAL);//延时
+ }
+ }
+ }
+
+ public synchronized void stop() {
+ CupidLogUtils.i(TAG, "停止重连");
+ isReconnection.set(false);
+ if (timer != null) {
+ timer.cancel();
+ timer = null;
+ }
+ }
+
+
+}
diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/socket/FpgaSocket.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/socket/FpgaSocket.java
index 61b2c4b619..49dc827ebb 100644
--- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/socket/FpgaSocket.java
+++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/socket/FpgaSocket.java
@@ -14,8 +14,10 @@ import androidx.annotation.NonNull;
import com.google.protobuf.InvalidProtocolBufferException;
import com.zhidao.support.adas.high.AdasChannel;
+import com.zhidao.support.adas.high.common.ByteUtil;
import com.zhidao.support.adas.high.common.CupidLogUtils;
import com.zhidao.support.adas.high.common.ReceiveTimeoutManager;
+import com.zhidao.support.adas.high.common.ReconnectManager;
import com.zhidao.support.adas.high.queue.WSByteQueueManager;
import com.zhidao.support.adas.high.queue.WebSocketQueueManager;
import com.zhjt.service.chain.ChainLog;
@@ -52,7 +54,7 @@ public class FpgaSocket implements IWebSocket {
private EchoWebSocketListener listener;
private IWebSocketConnectListener mWebSocketConnectListener;
-
+ private ReconnectManager reconnectManager;
private String wsHost;
private String ipAddress;
@@ -66,10 +68,7 @@ public class FpgaSocket implements IWebSocket {
* 是否是被动关闭
*/
private final AtomicBoolean isPassiveClose = new AtomicBoolean(false);
- /**
- * 是否启用自动重连
- */
- private boolean isReconnect = true;
+
/**
* 接收数据超时原因 null时表示不是接收数据超时的原因
*/
@@ -92,6 +91,12 @@ public class FpgaSocket implements IWebSocket {
onPassiveClose(1001, receiveTimeoutReason);
}
});
+ reconnectManager = new ReconnectManager(new ReconnectManager.OnReconnectListener() {
+ @Override
+ public void onReconnection() {
+ connect("重连中");
+ }
+ });
client = okBuilder.build();
}
@@ -113,25 +118,18 @@ public class FpgaSocket implements IWebSocket {
Request request = new Request.Builder()
.url(wsHost)
.build();
- mWebSocket = client.newWebSocket(request, listener);
+ client.newWebSocket(request, listener);
}
}
/**
* 重连
*/
- public void reconnect() {
- if (isReconnect) {
- if (!isUserClose.get()) {
- try {
- Thread.sleep(2000L);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- connect("重连中");
- } else {
- isUserClose.set(false);
- }
+ private void reconnect() {
+ if (!isUserClose.get()) {
+ reconnectManager.start();
+ } else {
+ isUserClose.set(false);
}
}
@@ -143,6 +141,7 @@ public class FpgaSocket implements IWebSocket {
}
isUserClose.set(true);
isPassiveClose.set(false);
+ reconnectManager.stop();
if (mWebSocket != null) {
close(true, 1000);
} else {
@@ -164,17 +163,12 @@ public class FpgaSocket implements IWebSocket {
public boolean sendDataWebSocket(ByteString data) {
if (mWebSocket != null) {
boolean result = mWebSocket.send(data);
- CupidLogUtils.i(TAG, "WebSocket send ByteString= " + data + ", result= " + result);
+ CupidLogUtils.i(TAG, "WebSocket send ByteString= " + ByteUtil.byteArrToHex(data.toByteArray()) + ", result= " + result);
return result;
}
return false;
}
- @Override
- public void setIsReconnect(boolean isReconnect) {
- this.isReconnect = isReconnect;
- }
-
public interface IWebSocketConnectListener {
/**
@@ -209,8 +203,9 @@ public class FpgaSocket implements IWebSocket {
mWebSocket = webSocket;
boolean isConnect = response.code() == 101;
if (!isConnect) {
- reconnect();
+ onPassiveClose(1001, "協議不匹配");
} else {
+ reconnectManager.stop();
ReceiveTimeoutManager.getInstance().start();
CupidLogUtils.i(TAG, "WebSocket 连接成功");
if (mWebSocketConnectListener != null)
@@ -330,7 +325,7 @@ public class FpgaSocket implements IWebSocket {
}
/**
- * 被动关闭 包含:服务断开 心跳超时 异常断开 等
+ * 被动关闭 包含:服务断开 心跳超时 等
*
* @param reason
*/
diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/socket/IWebSocket.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/socket/IWebSocket.java
index 04edb0d226..5403beed5d 100644
--- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/socket/IWebSocket.java
+++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/socket/IWebSocket.java
@@ -34,13 +34,6 @@ public interface IWebSocket {
boolean sendDataWebSocket(ByteString data);
- /**
- * 是否启用自动重连
- *
- * @param isReconnect
- */
- void setIsReconnect(boolean isReconnect);
-
}