//package com.prolog.rdc.tms.util;
//
//import java.net.InetSocketAddress;
//import java.nio.charset.StandardCharsets;
//
//import org.junit.Before;
//import org.junit.Test;
//
//import io.netty.bootstrap.Bootstrap;
//import io.netty.buffer.ByteBuf;
//import io.netty.buffer.ByteBufUtil;
//import io.netty.buffer.Unpooled;
//import io.netty.channel.ChannelFuture;
//import io.netty.channel.ChannelHandlerContext;
//import io.netty.channel.ChannelInitializer;
//import io.netty.channel.ChannelOption;
//import io.netty.channel.ChannelPipeline;
//import io.netty.channel.EventLoopGroup;
//import io.netty.channel.SimpleChannelInboundHandler;
//import io.netty.channel.nio.NioEventLoopGroup;
//import io.netty.channel.socket.nio.NioSocketChannel;
//
///**
// * @Description
// * @Author liq
// * @Date 2023/2/6 16:44
// **/
//public class SocketClientTest2 {
//	public String host = "prolog.bocai-cloud.com"; // ip地址
//	public int port = 20088; // 端口
//	// 客户端连接通道
//	ChannelFuture channelFuture = null;
//
//	public int reconnetTime = 10;
//
//	@Before
//	public void before() {
//		new Thread(() -> {
//			EventLoopGroup group = new NioEventLoopGroup(1);
//			Bootstrap bootstrap = new Bootstrap();
//			doConnect(bootstrap, group);
//		}).start();
//
//		try {
//			// 等待
//			Thread.sleep(5000L);
//		} catch (InterruptedException e) {
//			e.printStackTrace();
//		}
//	}
//
//	public void doConnect(Bootstrap bootstrap, EventLoopGroup group) {
//		try {
//			bootstrap.group(group);
//			bootstrap.channel(NioSocketChannel.class);
//			bootstrap.option(ChannelOption.SO_KEEPALIVE, true);
//			bootstrap.handler(new ChannelInitializer<NioSocketChannel>() {
//				@Override
//				protected void initChannel(NioSocketChannel ch) throws Exception {
//					ChannelPipeline pipeline = ch.pipeline();
//					// pipeline.addLast(new ChannelHandler[]{new FixedLengthFrameDecoder(100)});
//					ByteBuf delimiterBuf1 = Unpooled.copiedBuffer("{".getBytes(StandardCharsets.UTF_8));
//					ByteBuf delimiterBuf2 = Unpooled.copiedBuffer("}".getBytes(StandardCharsets.UTF_8));
//					// 心跳包
//					// pipeline.addFirst("clientIdleHandler", new ClientIdleHandler(10,
//					// Unpooled.copiedBuffer(ByteUtil.string2Byte("7e03010500000000000f278001feff34a87e"))));
//					// 解包处理器
//					pipeline.addLast("dynamic_decoder", new StartAndEndDelimiterDecoder(1024 * 10, delimiterBuf1, delimiterBuf2));
//					pipeline.addLast("handler", new SimpleChannelInboundHandler<Object>() {
//						@Override
//						public void channelRegistered(ChannelHandlerContext ctx) throws Exception {
//							super.channelRegistered(ctx);
//							System.out.println("channelRegistered");
//
//							/*
//							 * ctx.channel().eventLoop().schedule(() -> { // sendLogin(ctx.channel());
//							 * System.out.println("发送登录数据"); String data =
//							 * "{\"data\":\"111,222,333,44,44,666\"}"; ByteBuf loginBuffer =
//							 * Unpooled.copiedBuffer(data.getBytes());
//							 * ctx.channel().writeAndFlush(loginBuffer); }, 2, TimeUnit.SECONDS);
//							 */
//						}
//
//						@Override
//						public void channelInactive(ChannelHandlerContext ctx) throws Exception {
//							super.channelInactive(ctx);
//							System.out.println("channelInactive--关闭连接---");
//						}
//
//						@Override
//						protected void channelRead0(ChannelHandlerContext ch, Object o) throws Exception {
//							readMessage(ch, o);
//						}
//					});
//				}
//			});
//
//			channelFuture = bootstrap.connect(new InetSocketAddress(host, port)).sync();
//			channelFuture.channel().closeFuture().sync();
//		} catch (Exception e) {
//			e.printStackTrace();
//			throw new RuntimeException("连接失败", e);
//		} finally {
//			group.shutdownGracefully();
//		}
//	}
//
//	public static void readMessage(ChannelHandlerContext ch, Object msg) {
//		System.out.println("收到消息：" + new String(ByteBufUtil.getBytes((ByteBuf) msg)));
//	}
//
//	@Test
//	public void sendTest() {
//		while (true) {
//			try {
//				System.out.println("发送数据");
//				String data = "{\"data\":\"111,222,333,44,44,6668888\"}";
//				ByteBuf bf = Unpooled.copiedBuffer(data.getBytes());
//				channelFuture.channel().writeAndFlush(bf);
//
//				Thread.sleep(1000L);
//			} catch (InterruptedException e) {
//				e.printStackTrace();
//			}
//		}
//	}
//}
