From 82954841147ed6e258fefcff926697885ef65d7b Mon Sep 17 00:00:00 2001
From: endian11 <Dana_Lee1016@126.com>
Date: 星期五, 13 十二月 2019 14:28:11 +0800
Subject: [PATCH] 目前可以走通连接,和发送数据;需要关注ByteBuf是否需要手动释放,什么时候释放; 修改了google json array解析数据

---
 im_lib/src/main/java/com/anyun/im_lib/LoginAuthRespHandler.java               |    2 
 im_lib/src/main/java/com/anyun/im_lib/util/ByteUtil.java                      |   39 +++++++++++++++++++
 im_lib/src/main/java/com/anyun/im_lib/netty/TCPChannelInitializerHandler.java |    6 +-
 im_lib/src/main/java/com/anyun/im_lib/netty/NettyTcpClient.java               |   14 +++++-
 im_lib/src/main/java/com/anyun/im_lib/ExecutorServiceFactory.java             |    5 ++
 im_lib/src/main/java/com/anyun/im_lib/netty/TCPReadHandler.java               |   18 ++++++++-
 6 files changed, 75 insertions(+), 9 deletions(-)

diff --git a/im_lib/src/main/java/com/anyun/im_lib/ExecutorServiceFactory.java b/im_lib/src/main/java/com/anyun/im_lib/ExecutorServiceFactory.java
index 410c052..37e9ede 100644
--- a/im_lib/src/main/java/com/anyun/im_lib/ExecutorServiceFactory.java
+++ b/im_lib/src/main/java/com/anyun/im_lib/ExecutorServiceFactory.java
@@ -1,5 +1,7 @@
 package com.anyun.im_lib;
 
+import android.util.Log;
+
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 
@@ -10,6 +12,8 @@
  * All Rights Saved! Chongqing AnYun Tech co. LTD
  */
 public class ExecutorServiceFactory {
+
+    private static final String TAG = ExecutorServiceFactory.class.getSimpleName();
 
     /*** 绠$悊绾跨▼缁勶紝璐熻矗閲嶈繛***/
     private ExecutorService bossPool;
@@ -38,6 +42,7 @@
         if (bossPool == null){
             initBossLoopGroup();
         }
+        Log.i(TAG, "execBossTask");
         bossPool.execute(runnable);
     }
     /**
diff --git a/im_lib/src/main/java/com/anyun/im_lib/LoginAuthRespHandler.java b/im_lib/src/main/java/com/anyun/im_lib/LoginAuthRespHandler.java
index 6ebb52d..e0c0425 100644
--- a/im_lib/src/main/java/com/anyun/im_lib/LoginAuthRespHandler.java
+++ b/im_lib/src/main/java/com/anyun/im_lib/LoginAuthRespHandler.java
@@ -36,7 +36,7 @@
     @Override
     public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
         super.channelRead(ctx, msg);
-        Log.i(TAG, "channelRead"+(String)msg);
+//        Log.i(TAG, "channelRead"+(String)msg);
         // TODO: 2019/12/4  
     }
 }
diff --git a/im_lib/src/main/java/com/anyun/im_lib/netty/NettyTcpClient.java b/im_lib/src/main/java/com/anyun/im_lib/netty/NettyTcpClient.java
index 3867e0d..4306b86 100644
--- a/im_lib/src/main/java/com/anyun/im_lib/netty/NettyTcpClient.java
+++ b/im_lib/src/main/java/com/anyun/im_lib/netty/NettyTcpClient.java
@@ -12,10 +12,13 @@
 import com.anyun.im_lib.listener.IMSConnectStatusCallback;
 import com.anyun.im_lib.listener.OnEventListener;
 
+import java.nio.ByteBuffer;
 import java.util.Vector;
 import java.util.function.ToDoubleBiFunction;
 
 import io.netty.bootstrap.Bootstrap;
+import io.netty.buffer.ByteBuf;
+import io.netty.buffer.ByteBufAllocator;
 import io.netty.channel.Channel;
 import io.netty.channel.ChannelOption;
 import io.netty.channel.EventLoopGroup;
@@ -176,13 +179,14 @@
         try {
             channel = bootstrap.connect(currentHost,currentPort).sync().channel();
         } catch (InterruptedException e) {
+            Log.i(TAG, String.format("杩炴帴Server(ip[%s],port[%d]澶辫触)",currentHost,currentPort));
             try {
                 Thread.sleep(500);
             } catch (InterruptedException ex) {
                 ex.printStackTrace();
             }
 
-            Log.i(TAG, String.format("杩炴帴Server(ip[%s],port[%d]澶辫触)",currentHost,currentPort));
+
             channel = null;
         }
     }
@@ -318,7 +322,9 @@
             Log.i(TAG, "sendMsg fail,channel涓虹┖"+msg);
         }
         try {
-            channel.writeAndFlush(msg);
+            ByteBuf byteBuf = ByteBufAllocator.DEFAULT.ioBuffer();
+            byteBuf.writeBytes(msg.getBytes());
+            channel.writeAndFlush(byteBuf);
         } catch (Exception e) {
             Log.i(TAG, "鍙戦�佹秷鎭け璐ワ紝reason="+e.getMessage()+"\t"+msg);
         }
@@ -388,6 +394,7 @@
 
         @Override
         public void run() {
+            Log.i(TAG, "鎵ц閲嶈繛浠诲姟");
             if (!isFirst){
                 onConnectStatusCallback(IMSConfig.CONNECT_STATE_FAILURE);
             }
@@ -458,7 +465,7 @@
                     return IMSConfig.CONNECT_STATE_FAILURE;
                 }
                 String[] address = serverUrl.split(" ");
-                for (int j = 0; j < IMSConfig.DEFAULT_RECONNECT_COUNT; j++) {
+                for (int j = 1; j < IMSConfig.DEFAULT_RECONNECT_COUNT; j++) {
                     //濡傛灉ims宸茬粡鍏抽棴锛屾垨缃戠粶涓嶅彲鐢紝鐩存帴鍥炶皟杩炴帴鐘舵�侊紝涓嶅啀杩涜杩炴帴
                     if (isClosed || !isNetworkAvaliable()){
                         return IMSConfig.CONNECT_STATE_FAILURE;
@@ -471,6 +478,7 @@
                     try {
                         currentPort = Integer.parseInt(address[1]);
                         currentHost = address[0];
+                        Log.i(TAG, String.format("瑙f瀽鍦板潃[%s],port[%d]",currentHost,currentPort));
                         //杩炴帴鏈嶅姟鍣�
                         toServer();
                         //channel涓嶄负绌猴紝鍒欒涓鸿繛鎺ュ凡缁忔垚鍔�
diff --git a/im_lib/src/main/java/com/anyun/im_lib/netty/TCPChannelInitializerHandler.java b/im_lib/src/main/java/com/anyun/im_lib/netty/TCPChannelInitializerHandler.java
index 721707e..5663664 100644
--- a/im_lib/src/main/java/com/anyun/im_lib/netty/TCPChannelInitializerHandler.java
+++ b/im_lib/src/main/java/com/anyun/im_lib/netty/TCPChannelInitializerHandler.java
@@ -50,13 +50,13 @@
 //        涓轰簡鏇村姞娓呮鐨勮鏄庝竴涓嬩笂闈㈢殑瑙勫垯锛岃皟鏁翠竴涓嬩緥瀛愪腑鐨勪唬鐮併�傚湪鍐欏叆閫氶亾鍓嶏紝鍦ㄦ暟鎹�
 //        pipeline.addLast(new LengthFieldBasedFrameDecoder(1024,3 ,4,0,13));
 
-        pipeline.addLast(new FixedLengthFrameDecoder(31));  // 娴嬭瘯鐢�  鍥哄畾闀垮害娑堟伅
+        pipeline.addLast(new FixedLengthFrameDecoder(10));  // 娴嬭瘯鐢�  鍥哄畾闀垮害娑堟伅
 
         //鎻℃墜璁よ瘉娑堟伅鐩稿簲澶勭悊handler
-        pipeline.addLast(LoginAuthRespHandler.class.getSimpleName(), new LoginAuthRespHandler(imsClient));
+//        pipeline.addLast(LoginAuthRespHandler.class.getSimpleName(), new LoginAuthRespHandler(imsClient));
 
         //蹇冭烦娑堟伅鍝嶅簲澶勭悊handler
-        pipeline.addLast(HeartbeatRespHandler.class.getSimpleName(), new HeartbeatRespHandler(imsClient));
+//        pipeline.addLast(HeartbeatRespHandler.class.getSimpleName(), new HeartbeatRespHandler(imsClient));
 
         //鎺ユ敹娑堟伅澶勭悊handler
         pipeline.addLast(TCPReadHandler.class.getSimpleName(),new TCPReadHandler(imsClient));
diff --git a/im_lib/src/main/java/com/anyun/im_lib/netty/TCPReadHandler.java b/im_lib/src/main/java/com/anyun/im_lib/netty/TCPReadHandler.java
index 768ca32..2a7fe43 100644
--- a/im_lib/src/main/java/com/anyun/im_lib/netty/TCPReadHandler.java
+++ b/im_lib/src/main/java/com/anyun/im_lib/netty/TCPReadHandler.java
@@ -3,7 +3,12 @@
 import android.util.Log;
 
 import com.anyun.im_lib.interf.IMSClientInteface;
+import com.anyun.im_lib.util.ByteUtil;
 
+import java.nio.ByteBuffer;
+import java.nio.charset.Charset;
+
+import io.netty.buffer.ByteBuf;
 import io.netty.channel.Channel;
 import io.netty.channel.ChannelHandlerContext;
 import io.netty.channel.ChannelInboundHandlerAdapter;
@@ -45,6 +50,7 @@
         Channel channel = ctx.channel();
         if (channel != null){
             channel.close();
+            ctx.close();
         }
         //瑙﹀彂閲嶈繛
         imsClient.resetConnect(false);
@@ -54,13 +60,21 @@
     public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
         super.channelRead(ctx, msg);
         // TODO: 2019/12/4
-        Log.i(TAG, "channelRead: ");
-        imsClient.getMsgDispatcher().receivedMsg((String)msg);
+        //鏈嶅姟绔繑鍥炴秷鎭悗
+        ByteBuf buf = (ByteBuf) msg;
+        byte[] req = new byte[buf.readableBytes()];
+        buf.readBytes(req);
+        String str = new String(req, "UTF-8");
+        System.out.println("鏈嶅姟绔暟鎹负 :" + str);
+
+        Log.i(TAG, "channelRead: "+     str);
+        imsClient.getMsgDispatcher().receivedMsg(   str  );
     }
 
     @Override
     public void channelReadComplete(ChannelHandlerContext ctx) throws Exception {
         super.channelReadComplete(ctx);
         Log.i(TAG, "channelReadComplete");
+
     }
 }
diff --git a/im_lib/src/main/java/com/anyun/im_lib/util/ByteUtil.java b/im_lib/src/main/java/com/anyun/im_lib/util/ByteUtil.java
new file mode 100644
index 0000000..b6b7989
--- /dev/null
+++ b/im_lib/src/main/java/com/anyun/im_lib/util/ByteUtil.java
@@ -0,0 +1,39 @@
+package com.anyun.im_lib.util;
+
+import java.nio.ByteBuffer;
+import java.nio.CharBuffer;
+import java.nio.charset.Charset;
+import java.nio.charset.CharsetDecoder;
+
+/**
+ * MyApplication2
+ * Created by lzw on 2019/12/13. 12:01:18
+ * 閭锛�632393724@qq.com
+ * All Rights Saved! Chongqing AnYun Tech co. LTD
+ */
+public class ByteUtil {
+    /**
+     * ByteBuffer 杞崲 String
+     * @param buffer
+     * @return
+     */
+    public static String getString(ByteBuffer buffer)
+    {
+        Charset charset = null;
+        CharsetDecoder decoder = null;
+        CharBuffer charBuffer = null;
+        try
+        {
+            charset = Charset.forName("UTF-8");
+            decoder = charset.newDecoder();
+             charBuffer = decoder.decode(buffer);//鐢ㄨ繖涓殑璇濓紝鍙兘杈撳嚭鏉ヤ竴娆$粨鏋滐紝绗簩娆℃樉绀轰负绌�
+//            charBuffer = decoder.decode(buffer.asReadOnlyBuffer());
+            return charBuffer.toString();
+        }
+        catch (Exception ex)
+        {
+            ex.printStackTrace();
+            return "";
+        }
+    }
+}

--
Gitblit v1.8.0