package com.m2pool.lease.netty.handler;


import com.fasterxml.jackson.databind.ObjectMapper;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.MessageToByteEncoder;

public class MessageToJsonEncoder extends MessageToByteEncoder<Object> {
    private final ObjectMapper objectMapper = new ObjectMapper();

    @Override
    protected void encode(ChannelHandlerContext ctx, Object msg, ByteBuf out) throws Exception {
        // 使用 ObjectMapper 将 msg 对象序列化为 JSON 字符串
        String jsonStr = objectMapper.writeValueAsString(msg);
        // 如果 msg 是 String 类型，则直接使用 msg 的值
        if (msg instanceof String){
            jsonStr = (String) msg;
        }
        // 明确使用 UTF-8 编码创建 ByteBuf
        ByteBuf buffer = Unpooled.copiedBuffer(jsonStr, java.nio.charset.StandardCharsets.UTF_8);
        //客户端粘包半包问题 按换行符分割
        buffer.writeBytes("\n".getBytes());
        try {
            // 将生成的 ByteBuf 内容写入输出的 ByteBuf
            out.writeBytes(buffer);
        } finally {
            // 释放临时创建的 ByteBuf，避免内存泄漏
            buffer.release();
        }
    }
}
