diff --git a/app/src/main/java/com/casic/br/operationsite/service/ForegroundRunningService.kt b/app/src/main/java/com/casic/br/operationsite/service/ForegroundRunningService.kt index 392f03b..e8b5de3 100644 --- a/app/src/main/java/com/casic/br/operationsite/service/ForegroundRunningService.kt +++ b/app/src/main/java/com/casic/br/operationsite/service/ForegroundRunningService.kt @@ -53,7 +53,7 @@ override fun handleMessage(msg: Message): Boolean { when (msg.what) { 2024110501 -> notificationBuilder?.setContentTitle("通讯服务已连接") - 2024110502 -> notificationBuilder?.setContentTitle("通讯服务断开连接,开始重连") + 2024110502 -> notificationBuilder?.setContentTitle("通讯服务断开连接") 2024110503 -> notificationBuilder?.setContentTitle("通讯服务连接出错,开始重连") } val notification = notificationBuilder?.build() diff --git a/app/src/main/java/com/casic/br/operationsite/service/ForegroundRunningService.kt b/app/src/main/java/com/casic/br/operationsite/service/ForegroundRunningService.kt index 392f03b..e8b5de3 100644 --- a/app/src/main/java/com/casic/br/operationsite/service/ForegroundRunningService.kt +++ b/app/src/main/java/com/casic/br/operationsite/service/ForegroundRunningService.kt @@ -53,7 +53,7 @@ override fun handleMessage(msg: Message): Boolean { when (msg.what) { 2024110501 -> notificationBuilder?.setContentTitle("通讯服务已连接") - 2024110502 -> notificationBuilder?.setContentTitle("通讯服务断开连接,开始重连") + 2024110502 -> notificationBuilder?.setContentTitle("通讯服务断开连接") 2024110503 -> notificationBuilder?.setContentTitle("通讯服务连接出错,开始重连") } val notification = notificationBuilder?.build() diff --git a/app/src/main/java/com/casic/br/operationsite/service/SocketConnectionService.kt b/app/src/main/java/com/casic/br/operationsite/service/SocketConnectionService.kt index e30152b..5a294d9 100644 --- a/app/src/main/java/com/casic/br/operationsite/service/SocketConnectionService.kt +++ b/app/src/main/java/com/casic/br/operationsite/service/SocketConnectionService.kt @@ -152,11 +152,15 @@ override fun onCreate() { super.onCreate() weakReferenceHandler = WeakReferenceHandler(this) + } + + override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int { val socketOldIp = SaveKeyValues.getValue( LocaleConstant.SAFE_TREE_SOCKET_IP_KEY, "" ) as String tcpClient.start(socketOldIp, LocaleConstant.TCP_PORT) - Log.d(kTag, "onCreate: SocketConnectionService") + Log.d(kTag, "onStartCommand: SocketConnectionService") + return START_STICKY } override fun onConnected() { diff --git a/app/src/main/java/com/casic/br/operationsite/service/ForegroundRunningService.kt b/app/src/main/java/com/casic/br/operationsite/service/ForegroundRunningService.kt index 392f03b..e8b5de3 100644 --- a/app/src/main/java/com/casic/br/operationsite/service/ForegroundRunningService.kt +++ b/app/src/main/java/com/casic/br/operationsite/service/ForegroundRunningService.kt @@ -53,7 +53,7 @@ override fun handleMessage(msg: Message): Boolean { when (msg.what) { 2024110501 -> notificationBuilder?.setContentTitle("通讯服务已连接") - 2024110502 -> notificationBuilder?.setContentTitle("通讯服务断开连接,开始重连") + 2024110502 -> notificationBuilder?.setContentTitle("通讯服务断开连接") 2024110503 -> notificationBuilder?.setContentTitle("通讯服务连接出错,开始重连") } val notification = notificationBuilder?.build() diff --git a/app/src/main/java/com/casic/br/operationsite/service/SocketConnectionService.kt b/app/src/main/java/com/casic/br/operationsite/service/SocketConnectionService.kt index e30152b..5a294d9 100644 --- a/app/src/main/java/com/casic/br/operationsite/service/SocketConnectionService.kt +++ b/app/src/main/java/com/casic/br/operationsite/service/SocketConnectionService.kt @@ -152,11 +152,15 @@ override fun onCreate() { super.onCreate() weakReferenceHandler = WeakReferenceHandler(this) + } + + override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int { val socketOldIp = SaveKeyValues.getValue( LocaleConstant.SAFE_TREE_SOCKET_IP_KEY, "" ) as String tcpClient.start(socketOldIp, LocaleConstant.TCP_PORT) - Log.d(kTag, "onCreate: SocketConnectionService") + Log.d(kTag, "onStartCommand: SocketConnectionService") + return START_STICKY } override fun onConnected() { diff --git a/app/src/main/java/com/casic/br/operationsite/utils/TcpClient.kt b/app/src/main/java/com/casic/br/operationsite/utils/TcpClient.kt index 739a105..91f82bb 100644 --- a/app/src/main/java/com/casic/br/operationsite/utils/TcpClient.kt +++ b/app/src/main/java/com/casic/br/operationsite/utils/TcpClient.kt @@ -11,7 +11,6 @@ import io.netty.channel.ChannelHandlerContext import io.netty.channel.ChannelInitializer import io.netty.channel.ChannelOption -import io.netty.channel.EventLoopGroup import io.netty.channel.SimpleChannelInboundHandler import io.netty.channel.nio.NioEventLoopGroup import io.netty.channel.socket.SocketChannel @@ -33,10 +32,9 @@ private val kTag = "TcpClient" private val reconnectDelay = 15L - private var maxRetryTimes = 10 // 设置最大重连次数 + private val maxRetryTimes = 10 // 设置最大重连次数 + private val loopGroup by lazy { NioEventLoopGroup() } private var needReconnect = false - private var bootStrap: Bootstrap = Bootstrap() - private var loopGroup: EventLoopGroup = NioEventLoopGroup() private lateinit var host: String private var port: Int = 0 private var channel: Channel? = null @@ -48,18 +46,6 @@ @Volatile private var retryTimes = AtomicInteger(0) - init { - bootStrap.group(loopGroup) - .channel(NioSocketChannel::class.java) - .option(ChannelOption.TCP_NODELAY, true) //无阻塞 - .option(ChannelOption.SO_KEEPALIVE, true) //长连接 - .option( - ChannelOption.RCVBUF_ALLOCATOR, AdaptiveRecvByteBufAllocator(5000, 5000, 8000) - ) - .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 5000) - .handler(SimpleChannelInitializer()) - } - /** * TcpClient 是否正在运行 * */ @@ -71,6 +57,7 @@ this.host = host this.port = port if (isRunning.get()) { + Log.d(kTag, "start: TcpClient 正在运行") return } connect() @@ -108,6 +95,7 @@ Log.d(kTag, "exceptionCaught: ${cause.message}") listener.onConnectFailed() ctx.close() + isRunning.set(false) } }) } @@ -116,12 +104,25 @@ @Synchronized private fun connect() { if (channel != null && channel!!.isActive) { + Log.d(kTag, "connect: TcpClient 正在运行") return } scope = CoroutineScope(Dispatchers.IO + SupervisorJob()) scope?.launch(Dispatchers.IO) { try { Log.d(kTag, "start connect: ${host}:${port}") + var bootStrap = Bootstrap().apply { + group(loopGroup) + channel(NioSocketChannel::class.java) + option(ChannelOption.TCP_NODELAY, true) //无阻塞 + option(ChannelOption.SO_KEEPALIVE, true) //长连接 + option( + ChannelOption.RCVBUF_ALLOCATOR, + AdaptiveRecvByteBufAllocator(5000, 5000, 8000) + ) + option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 5000) + handler(SimpleChannelInitializer()) + } val channelFuture = bootStrap.connect(host, port) .addListener(object : ChannelFutureListener { override fun operationComplete(channelFuture: ChannelFuture) {