From 5bbb623edd0c72d1dd2169a6cb23040d09195f87 Mon Sep 17 00:00:00 2001 From: chenfufeng Date: Wed, 18 May 2022 16:26:18 +0800 Subject: [PATCH] =?UTF-8?q?[Update]=E4=BC=98=E5=8C=96=E8=BF=9E=E6=8E=A5?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gradle.properties | 24 +++++++-------- .../com/mogo/telematic/NSDNettyManager.java | 2 +- .../mogo/telematic/client/NettyTcpClient.java | 6 +++- .../client/handler/NettyClientHandler.java | 22 -------------- .../client/handler/ReconnectHandler.kt | 29 +++++++++++-------- .../client/listener/NettyClientListener.java | 4 +-- 6 files changed, 37 insertions(+), 50 deletions(-) diff --git a/gradle.properties b/gradle.properties index 98395db..b3244e0 100644 --- a/gradle.properties +++ b/gradle.properties @@ -36,26 +36,26 @@ PASSWORD=xintai2018 RELEASE=true # AI CLOUD 云平台 # 工具类 -MOGO_UTILS_VERSION=1.3.56 +MOGO_UTILS_VERSION=1.3.57 # 网络请求 -MOGO_NETWORK_VERSION=1.3.56 +MOGO_NETWORK_VERSION=1.3.57 # 网络DNS -MOGO_HTTPDNS_VERSION=1.3.56 +MOGO_HTTPDNS_VERSION=1.3.57 # 鉴权 -MOGO_PASSPORT_VERSION=1.3.56 +MOGO_PASSPORT_VERSION=1.3.57 # 常链接 -MOGO_SOCKET_VERSION=1.3.56 +MOGO_SOCKET_VERSION=1.3.57 # 数据采集 -MOGO_REALTIME_VERSION=1.3.56 +MOGO_REALTIME_VERSION=1.3.57 # 探路,道路事件发布,获取 -MOGO_TANLU_VERSION=1.3.56 +MOGO_TANLU_VERSION=1.3.57 # 直播推流 -MOGO_LIVE_VERSION=1.3.56 +MOGO_LIVE_VERSION=1.3.57 # 直播拉流 -MOGO_TRAFFICLIVE_VERSION=1.3.56 +MOGO_TRAFFICLIVE_VERSION=1.3.57 # 定位服务 -MOGO_LOCATION_VERSION=1.3.56 +MOGO_LOCATION_VERSION=1.3.57 # 远程通讯模块 -MOGO_TELEMATIC_VERSION=1.3.56 +MOGO_TELEMATIC_VERSION=1.3.57 # v2x -MOGO_V2X_VERSION=1.3.56 +MOGO_V2X_VERSION=1.3.57 diff --git a/libraries/mogo-telematic/src/main/java/com/mogo/telematic/NSDNettyManager.java b/libraries/mogo-telematic/src/main/java/com/mogo/telematic/NSDNettyManager.java index ae5f991..78cd7c9 100644 --- a/libraries/mogo-telematic/src/main/java/com/mogo/telematic/NSDNettyManager.java +++ b/libraries/mogo-telematic/src/main/java/com/mogo/telematic/NSDNettyManager.java @@ -243,7 +243,7 @@ public class NSDNettyManager { if (!mNettyTcpClient.getConnectStatus()) { mNettyTcpClient.connect();//连接服务器 } else { - mNettyTcpClient.disconnect(); + Logger.d(TAG, "Client is connected."); } } diff --git a/libraries/mogo-telematic/src/main/java/com/mogo/telematic/client/NettyTcpClient.java b/libraries/mogo-telematic/src/main/java/com/mogo/telematic/client/NettyTcpClient.java index 0d46b1b..8693a76 100644 --- a/libraries/mogo-telematic/src/main/java/com/mogo/telematic/client/NettyTcpClient.java +++ b/libraries/mogo-telematic/src/main/java/com/mogo/telematic/client/NettyTcpClient.java @@ -146,7 +146,7 @@ public class NettyTcpClient { .handler(new ChannelInitializer() { @Override public void initChannel(SocketChannel ch) throws Exception { - ch.pipeline().addLast(new ReconnectHandler(NettyTcpClient.this)); + ch.pipeline().addLast(new ReconnectHandler(NettyTcpClient.this, mProxyListener)); if (isSendheartBeat) { ch.pipeline().addLast("ping", new IdleStateHandler(0, heartBeatInterval, 0, TimeUnit.SECONDS));//5s未发送数据,回调userEventTriggered } @@ -190,6 +190,10 @@ public class NettyTcpClient { ChannelFuture channelFuture; try { if (bootstrap != null) { + if (group == null || group.isShutdown()) { + group = new NioEventLoopGroup(); + bootstrap.group(group); + } channelFuture = bootstrap.connect(host, tcp_port); channel = channelFuture.channel(); channelFuture.addListener(mFutureListener); diff --git a/libraries/mogo-telematic/src/main/java/com/mogo/telematic/client/handler/NettyClientHandler.java b/libraries/mogo-telematic/src/main/java/com/mogo/telematic/client/handler/NettyClientHandler.java index 47d8464..c0e36c2 100644 --- a/libraries/mogo-telematic/src/main/java/com/mogo/telematic/client/handler/NettyClientHandler.java +++ b/libraries/mogo-telematic/src/main/java/com/mogo/telematic/client/handler/NettyClientHandler.java @@ -75,16 +75,6 @@ public class NettyClientHandler extends SimpleChannelInboundHandler客户端下线

- * - * @param ctx ChannelHandlerContext - */ - @Override - public void channelInactive(ChannelHandlerContext ctx) { - Logger.e(TAG, "channelInactive"); - } - /** * 客户端收到消息 * @@ -102,16 +92,4 @@ public class NettyClientHandler extends SimpleChannelInboundHandler? +) : ChannelInboundHandlerAdapter() { private val maxRetries = Int.MAX_VALUE private var retries = 0 private val baseSleepTimeMs = 3000 private val maxSleepMs = 10 * 1000 - private val scheduledThreadPool by lazy(LazyThreadSafetyMode.SYNCHRONIZED) { - Executors.newScheduledThreadPool(1) - } companion object { private const val TAG = "ReconnectHandler" @@ -32,14 +32,20 @@ class ReconnectHandler(private val mNettyClient: NettyTcpClient) : ChannelInboun @Throws(Exception::class) override fun exceptionCaught(ctx: ChannelHandlerContext, cause: Throwable) { - ctx.close() Logger.e(TAG, "ReconnectHandler#exceptionCaught cause message is:${cause.message}") + listener?.onClientStatusConnectChanged( + ConnectState.STATUS_CONNECT_ERROR, + cause.message, + ctx.channel() + ) + cause.printStackTrace() + ctx.close() } @Throws(Exception::class) override fun channelInactive(ctx: ChannelHandlerContext) { Logger.d(TAG, "ReconnectHandler channelInactive ...") - // TODO:(策略暂时耦合在这里,后面使用策略模式) + listener?.onClientStatusConnectChanged(STATUS_CONNECT_CLOSED, "channelInactive", ctx.channel()) var allowRetry = false if (retries < maxRetries) { allowRetry = true @@ -55,8 +61,7 @@ class ReconnectHandler(private val mNettyClient: NettyTcpClient) : ChannelInboun sleepTimeMs = maxSleepMs.toLong() } Logger.d(TAG, "${sleepTimeMs}ms后执行重连操作!") - scheduledThreadPool.schedule({ - // 异步重连或单独线程池中同步重连,不要阻塞netty的io线程,同时也不要关闭EventLoopGroup + ctx.channel().eventLoop().schedule({ mNettyClient.reconnectServer() }, sleepTimeMs, TimeUnit.MILLISECONDS) ++retries diff --git a/libraries/mogo-telematic/src/main/java/com/mogo/telematic/client/listener/NettyClientListener.java b/libraries/mogo-telematic/src/main/java/com/mogo/telematic/client/listener/NettyClientListener.java index 0057fe3..7a7e4c6 100644 --- a/libraries/mogo-telematic/src/main/java/com/mogo/telematic/client/listener/NettyClientListener.java +++ b/libraries/mogo-telematic/src/main/java/com/mogo/telematic/client/listener/NettyClientListener.java @@ -18,7 +18,7 @@ public interface NettyClientListener { /** * 当服务状态发生变化时触发 * @param statusCode 状态变化 - * @param sign tcp 客户端的标识,因为一个应用程序可能有很多个长链接 + * @param content */ - void onClientStatusConnectChanged(int statusCode, String sign, Channel channel); + void onClientStatusConnectChanged(int statusCode, String content, Channel channel); }