package cn.ctodb.push.client;

import java.io.IOException;

import cn.ctodb.push.core.Connection;
import cn.ctodb.push.core.PacketReceiver;
import cn.ctodb.push.dto.Command;
import cn.ctodb.push.dto.Packet;
import io.netty.channel.ChannelInboundHandlerAdapter;

import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelHandler.Sharable;

@Sharable
public class ClientHandler extends ChannelInboundHandlerAdapter {
    private PacketReceiver packetReceiver;

    public ClientHandler(PacketReceiver packetReceiver) {
        this.packetReceiver = packetReceiver;
    }

    /**
     * tcp链路简历成功后调用
     */
    @Override
    public void channelActive(ChannelHandlerContext ctx) throws Exception {
        System.out.println("成功连接服务器");
        // TextMessage message = new TextMessage();
        // message.setMessage("test");
        // sendMsg(message);
    }

    /**
     * 收到消息后调用
     *
     * @throws IOException
     */
    @Override
    public void channelRead(ChannelHandlerContext ctx, Object msg) throws IOException {
        Packet packet = (Packet) msg;
        Connection connection = new Connection();
        connection.setChc(ctx);
        packetReceiver.onReceive(packet, connection);
    }

    /**
     * 发生异常时调用
     */
    @Override
    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {
        System.err.println("与服务器断开连接:" + cause);
        ctx.close();
    }

}