package com.tongran.agenttcp.server.handler; import com.alibaba.fastjson2.JSON; import com.tongran.agenttcp.server.model.Message; import com.tongran.agenttcp.server.netty.core.session.SessionManager; import com.tongran.agenttcp.utils.AssertLog; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import io.netty.channel.ChannelHandler; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelOutboundHandlerAdapter; import io.netty.channel.ChannelPromise; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Component; import java.nio.charset.StandardCharsets; @Component @ChannelHandler.Sharable public class AgentEncoderHandler extends ChannelOutboundHandlerAdapter { protected final SessionManager sessionManager; public AgentEncoderHandler() { this.sessionManager = SessionManager.getInstance(); } /** * 消息解码器 */ @Override public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception { if (msg instanceof Message) { Message entity = (Message) msg; if (StringUtils.isBlank(entity.getData())) { AssertLog.error(">>[down]:IP:{},errorContent:{}", sessionManager.client(ctx), msg); return; } AssertLog.info(">>[down]:IP:{},[content]==>{}", sessionManager.client(ctx), entity.getData()); // String json = JSON.toJSONString(entity); String json = "agent-server:"+JSON.toJSONString(entity)+"@tong-ran"; byte[] bytes = json.getBytes(StandardCharsets.UTF_8); // 显式指定 UTF-8 // byte[] bytes = EscapeUtil.hexStringToByteArray(entity.getContent()); ByteBuf buf = Unpooled.wrappedBuffer(bytes); ctx.write(buf, promise); } } }