package com.persagy.socket;

import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.SimpleChannelInboundHandler;
import lombok.extern.slf4j.Slf4j;

/**
 * 
 * @version 1.0.0
 * @company persagy 
 * @author zhangqiankun
 * @date 2021年10月12日 上午10:20:11
 */
@Slf4j
public class IotClientHandler extends SimpleChannelInboundHandler<String> {

	/** 需要调用的指令信息，后缀需携带 短路与 & */
	private final String command;
	
    public IotClientHandler(String command) {
    	this.command = command;
	}

	/**
     * 向服务端发送数据
     */
    @Override
    public void channelActive(ChannelHandlerContext ctx) throws Exception {
    	log.info("发送至服务端的消息: {}", command);
        ctx.writeAndFlush(command);
    }

    /**
     * 接收数据
     */
    @Override
    protected void channelRead0(ChannelHandlerContext ctx, String msg) throws Exception {
        log.info("客户端接收到的服务端信息:" + msg);
        ctx.writeAndFlush("C6 11 43 20 11 BB");
        log.info("客户端接回执服务端的信息: C6 11 43 20 11 BB");
        Thread.sleep(1000);
        ctx.close();
    }
	
    /**
     * channel 通道 Inactive 不活跃的
     *
     * 当客户端主动断开服务端的链接后，这个通道就是不活跃的。也就是说客户端与服务端的关闭了通信通道并且不可以传输数据
     */
    public void channelInactive(ChannelHandlerContext ctx) throws Exception {
        log.info("客户端与服务端通道关闭：" + ctx.channel().remoteAddress());
        ctx.close();
    }

    @Override
    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
    	log.warn("通道异常退出", cause);
        ctx.close();
    }
    
}
