// Path: src/main/java/com/baidu/unbiz/multiengine/codec/HeadCodec.java
// public interface HeadCodec extends MsgCodec {
//     /**
//      * 反序列化
//      *
//      * @param clazz 反序列化后的类定义
//      * @param bytes 字节码
//      *
//      * @return 反序列化后的对象
//      *
//      * @throws CodecException
//      */
//     <T> T decode(Class<T> clazz, byte[] bytes) throws CodecException;
// 
//     /**
//      * 序列化
//      *
//      * @param object 待序列化的对象
//      *
//      * @return 字节码
//      *
//      * @throws CodecException
//      */
//     <T> byte[] encode(T object) throws CodecException;
// 
//     /**
//      * head的类型
//      *
//      * @return
//      */
//     Class getHeadClass();
// }
// 
// Path: src/main/java/com/baidu/unbiz/multiengine/codec/MsgCodec.java
// public interface MsgCodec {
//     /**
//      * 反序列化
//      *
//      * @param clazz 反序列化后的类定义
//      * @param bytes 字节码
//      * @return 反序列化后的对象
//      * @throws CodecException
//      */
//      <T> T decode(Class<T> clazz, byte[] bytes) throws CodecException;
// 
//     /**
//      * 序列化
//      *
//      * @param object 待序列化的对象
//      * @return 字节码
//      * @throws CodecException
//      */
//     <T> byte[] encode(T object) throws CodecException;
// }


import com.baidu.unbiz.multiengine.codec.HeadCodec;
import com.baidu.unbiz.multiengine.codec.MsgCodec;
import io.netty.handler.codec.ByteToMessageDecoder;
import io.netty.handler.codec.MessageToByteEncoder;
package com.baidu.unbiz.multiengine.codec.bytebuf;



/**
 * 默认的二进制编解码器工厂
 */
public class DefaultByteCodecFactory implements ByteCodecFactory {

    private MsgCodec msgCodec;
    private HeadCodec headCodec;

    @Override
    public MessageToByteEncoder<Object> getEncoder() {
        ByteEncoder encoder = new ByteEncoder();
        encoder.setMessageCodec(msgCodec);
        encoder.setHeadCodec(headCodec);
        return encoder;
    }

    @Override
    public ByteToMessageDecoder getDecoder() {
        ByteDecoder decoder = new ByteDecoder();
        decoder.setMessageCodec(msgCodec);
        decoder.setHeadCodec(headCodec);
        return decoder;
    }

// Path: src/main/java/com/baidu/unbiz/multiengine/codec/HeadCodec.java
// public interface HeadCodec extends MsgCodec {
//     /**
//      * 反序列化
//      *
//      * @param clazz 反序列化后的类定义
//      * @param bytes 字节码
//      *
//      * @return 反序列化后的对象
//      *
//      * @throws CodecException
//      */
//     <T> T decode(Class<T> clazz, byte[] bytes) throws CodecException;
// 
//     /**
//      * 序列化
//      *
//      * @param object 待序列化的对象
//      *
//      * @return 字节码
//      *
//      * @throws CodecException
//      */
//     <T> byte[] encode(T object) throws CodecException;
// 
//     /**
//      * head的类型
//      *
//      * @return
//      */
//     Class getHeadClass();
// }
// 
// Path: src/main/java/com/baidu/unbiz/multiengine/codec/MsgCodec.java
// public interface MsgCodec {
//     /**
//      * 反序列化
//      *
//      * @param clazz 反序列化后的类定义
//      * @param bytes 字节码
//      * @return 反序列化后的对象
//      * @throws CodecException
//      */
//      <T> T decode(Class<T> clazz, byte[] bytes) throws CodecException;
// 
//     /**
//      * 序列化
//      *
//      * @param object 待序列化的对象
//      * @return 字节码
//      * @throws CodecException
//      */
//     <T> byte[] encode(T object) throws CodecException;
// }


// Path: src/main/java/com/baidu/unbiz/multiengine/codec/bytebuf/DefaultByteCodecFactory.java
import com.baidu.unbiz.multiengine.codec.HeadCodec;
import com.baidu.unbiz.multiengine.codec.MsgCodec;
import io.netty.handler.codec.ByteToMessageDecoder;
import io.netty.handler.codec.MessageToByteEncoder;

package com.baidu.unbiz.multiengine.codec.bytebuf;



/**
 * 默认的二进制编解码器工厂
 */
public class DefaultByteCodecFactory implements ByteCodecFactory {

    private MsgCodec msgCodec;
    private HeadCodec headCodec;

    @Override
    public MessageToByteEncoder<Object> getEncoder() {
        ByteEncoder encoder = new ByteEncoder();
        encoder.setMessageCodec(msgCodec);
        encoder.setHeadCodec(headCodec);
        return encoder;
    }

    @Override
    public ByteToMessageDecoder getDecoder() {
        ByteDecoder decoder = new ByteDecoder();
        decoder.setMessageCodec(msgCodec);
        decoder.setHeadCodec(headCodec);
        return decoder;
    }

    public void setMsgCodec(MsgCodec msgCodec) {