From b81d0cf47a08b3b5de01bf753fb71f6d1fda783a Mon Sep 17 00:00:00 2001 From: fctom1215 <fctom1215@outlook.com> Date: 星期日, 23 二月 2020 15:21:02 +0800 Subject: [PATCH] Merge branch 'master' of https://gitee.com/endian11/DriveJudge --- im_lib/src/main/java/com/anyun/im_lib/HeartbeatHandler.java | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 52 insertions(+), 0 deletions(-) diff --git a/im_lib/src/main/java/com/anyun/im_lib/HeartbeatHandler.java b/im_lib/src/main/java/com/anyun/im_lib/HeartbeatHandler.java index a0e4314..75abb73 100644 --- a/im_lib/src/main/java/com/anyun/im_lib/HeartbeatHandler.java +++ b/im_lib/src/main/java/com/anyun/im_lib/HeartbeatHandler.java @@ -1,6 +1,13 @@ package com.anyun.im_lib; +import com.anyun.im_lib.netty.NettyTcpClient; +import com.anyun.im_lib.util.MyLog; +import com.safeluck.aykj.utils.BytesUtils; + +import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelInboundHandlerAdapter; +import io.netty.handler.timeout.IdleState; +import io.netty.handler.timeout.IdleStateEvent; /** * MyApplication2 @@ -9,4 +16,49 @@ * All Rights Saved! Chongqing AnYun Tech co. LTD */ public class HeartbeatHandler extends ChannelInboundHandlerAdapter { + private NettyTcpClient imsClient; + public HeartbeatHandler(NettyTcpClient imsClient) { + this.imsClient = imsClient; + } + private HeartbeatTask heartbeatTask; + private class HeartbeatTask implements Runnable { + + private ChannelHandlerContext ctx; + + public HeartbeatTask(ChannelHandlerContext ctx) { + this.ctx = ctx; + } + + @Override + public void run() { + if (ctx.channel().isActive()) { + byte []heartbeatMsg = imsClient.getHeartbeatMsg(); + if (heartbeatMsg == null) { + return; + } + MyLog.i("鍙戦�佸績璺虫秷鎭紝message=" + BytesUtils.bytesToHexString(heartbeatMsg) + "褰撳墠蹇冭烦闂撮殧涓猴細" +imsClient.getHeartbeatInterval() + "ms\n"); + imsClient.sendMsg(heartbeatMsg, false); + } + } + } + @Override + public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception { + super.userEventTriggered(ctx, evt); + if (evt instanceof IdleStateEvent){ + IdleState state = ((IdleStateEvent)evt).state(); + switch (state){ + case READER_IDLE: + // 瑙勫畾鏃堕棿鍐呮病鏀跺埌鏈嶅姟绔績璺冲寘鍝嶅簲锛岃繘琛岄噸杩炴搷浣� + break; + case WRITER_IDLE: + // 瑙勫畾鏃堕棿鍐呮病鍚戞湇鍔$鍙戦�佸績璺冲寘锛屽嵆鍙戦�佷竴涓績璺冲寘 + if (heartbeatTask == null) { + heartbeatTask = new HeartbeatTask(ctx); + } + imsClient.getLoopGroup().execWorkTask(heartbeatTask); + break; + + } + } + } } -- Gitblit v1.8.0