package org.lyx.netty.custom.server;

import org.lyx.netty.custom.struct.Header;
import org.lyx.netty.custom.struct.NettyMessage;

import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;

public class ServerHandler extends ChannelInboundHandlerAdapter {

	/**
	 * 当我们通道进行激活的时候 触发的监听方法
	 */
    @Override
    public void channelActive(ChannelHandlerContext ctx) throws Exception {
    
    	System.err.println("--------通道激活------------");
    }
	
    /**
     * 当我们的通道里有数据进行读取的时候 触发的监听方法
     */
    @Override
    public void channelRead(ChannelHandlerContext ctx /*NETTY服务上下文*/, Object msg /*实际的传输数据*/) throws Exception {
    	
    	NettyMessage requestMessage = (NettyMessage)msg;
    	
    	System.err.println("Server receive message from Client: " + requestMessage.getBody());

    	NettyMessage responseMessage = new NettyMessage();
		Header header = new Header();
		header.setSessionID(2002L);
		header.setPriority((byte)2);
		header.setType((byte)1);
		responseMessage.setHeader(header);
		responseMessage.setBody("我是响应数据: " + requestMessage.getBody());
		ctx.writeAndFlush(responseMessage);
    	
    }
    
    @Override
    public void channelReadComplete(ChannelHandlerContext ctx) throws Exception {
       System.err.println("--------数据读取完毕----------");
    }
    
    @Override
    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause)
            throws Exception {
    	System.err.println("--------服务器数据读异常----------: ");
    	cause.printStackTrace();
        ctx.close();
    }
    
    
    
    
    
    
    
    
    
    
    
    
    
}