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