diff --git a/foudations/mogo-base-websocket-sdk/build.gradle b/foudations/mogo-base-websocket-sdk/build.gradle index fd207afda9..bc4cc643de 100644 --- a/foudations/mogo-base-websocket-sdk/build.gradle +++ b/foudations/mogo-base-websocket-sdk/build.gradle @@ -42,6 +42,7 @@ dependencies { implementation project(":services:mogo-service-api") implementation project(':modules:mogo-module-common') } + implementation project(':foudations:httpdns-base') } diff --git a/foudations/mogo-base-websocket-sdk/src/main/java/com/mogo/base/websocket/WebSocketDnsManager.java b/foudations/mogo-base-websocket-sdk/src/main/java/com/mogo/base/websocket/WebSocketDnsManager.java new file mode 100644 index 0000000000..c8851ee786 --- /dev/null +++ b/foudations/mogo-base-websocket-sdk/src/main/java/com/mogo/base/websocket/WebSocketDnsManager.java @@ -0,0 +1,54 @@ +package com.mogo.base.websocket; + +import com.alibaba.android.arouter.launcher.ARouter; +import com.mogo.httpdns.IMogoHttpDns; +import com.mogo.utils.ThreadPoolService; +import com.mogo.utils.logger.Logger; + +public class WebSocketDnsManager { + + private static final String TAG = "WebSocketDnsManager"; + + private WebSocketDnsManager() { + + } + + private static final class Holder { + private static WebSocketDnsManager dnsManager = new WebSocketDnsManager(); + } + + public static WebSocketDnsManager getInstance() { + return Holder.dnsManager; + } + + private WebSocketDns webSocketDns; + private String cacheIp; + + public void getHttpDnsIp(WebSocketDns webSocketDns) { + this.webSocketDns = webSocketDns; + IMogoHttpDns mogoHttpDns = ARouter.getInstance().navigation(IMogoHttpDns.class); + ThreadPoolService.execute(() -> mogoHttpDns.getHttpDnsIp(WebSocketConstant.getSocketServer(), true, ip -> { + Logger.d(TAG, "getHttpDnsIp ip : " + ip + " , 得到Dns IP,准备回调 初始化webSocket"); + this.cacheIp = ip; + this.webSocketDns.getDnsIp(cacheIp != null ? cacheIp : WebSocketConstant.getSocketServer()); + })); + mogoHttpDns.addHttpDnsTtlCallback(WebSocketConstant.getSocketServer(), () -> { + Logger.d(TAG, "ttl callBack ,ready to getCache Dns IP"); + String dnsCacheIp = mogoHttpDns.getCachedHttpDnsIps(WebSocketConstant.getSocketServer()); + if (dnsCacheIp == null) { + return; + } + Logger.d(TAG, "获取缓存Dns IP : " + dnsCacheIp + " , 原缓存 IP : " + cacheIp); + if (cacheIp != null && !cacheIp.equals(dnsCacheIp)) { + this.webSocketDns.ttlIp(dnsCacheIp); + } + }); + } + + public interface WebSocketDns { + + void getDnsIp(String ip); + + void ttlIp(String ip); + } +} diff --git a/foudations/mogo-base-websocket-sdk/src/main/java/com/mogo/base/websocket/WebSocketManager.java b/foudations/mogo-base-websocket-sdk/src/main/java/com/mogo/base/websocket/WebSocketManager.java index f8d85e6f04..1e9fe4263b 100644 --- a/foudations/mogo-base-websocket-sdk/src/main/java/com/mogo/base/websocket/WebSocketManager.java +++ b/foudations/mogo-base-websocket-sdk/src/main/java/com/mogo/base/websocket/WebSocketManager.java @@ -68,7 +68,26 @@ public class WebSocketManager implements IMogoWebSocketManager, ISocketMsgSettin @Override public void init(Context context, String appId) { - SocketClient.getInstance().getClientProxy().initSocketServer(WebSocketConstant.getSocketServer()); + WebSocketDnsManager.getInstance().getHttpDnsIp(new WebSocketDnsManager.WebSocketDns() { + @Override + public void getDnsIp(String ip) { + Logger.d(TAG,"getDnsIp ip : " + ip); + initWebSocket(ip); + } + + @Override + public void ttlIp(String ip) { + Logger.d(TAG,"ttlIp ip : " + ip); + SocketClient.getInstance().getClientProxy().stop(); + SocketClient.getInstance().getClientProxy().disConnect(); + Logger.d(TAG,"ready to re initWebSocket : " + ip); + initWebSocket(ip); + } + }); + } + + private void initWebSocket(String ip){ + SocketClient.getInstance().getClientProxy().initSocketServer(ip); SocketClient.getInstance().getClientProxy().getMessageSettings(this); SocketClient.getInstance().getClientProxy().addISocketMsgCallBack(this); SocketClient.getInstance().getClientProxy().startConnect();