| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- package org.dromara.netty;
- import cn.hutool.core.util.CharsetUtil;
- import cn.hutool.core.util.StrUtil;
- import io.netty.buffer.ByteBuf;
- import io.netty.buffer.Unpooled;
- import io.netty.channel.ChannelHandlerContext;
- import io.netty.channel.ChannelPromise;
- import io.netty.channel.DefaultAddressedEnvelope;
- import io.netty.handler.codec.MessageToMessageEncoder;
- import java.net.SocketAddress;
- import java.nio.charset.StandardCharsets;
- import java.util.List;
- public class Encode extends MessageToMessageEncoder {
- @Override
- public void connect(ChannelHandlerContext ctx, SocketAddress remoteAddress, SocketAddress localAddress, ChannelPromise promise) throws Exception {
- super.connect(ctx, remoteAddress, localAddress, promise);
- }
- @Override
- public void disconnect(ChannelHandlerContext ctx, ChannelPromise promise) throws Exception {
- super.disconnect(ctx, promise);
- }
- @Override
- public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception {
- super.write(ctx, msg, promise);
- }
- @Override
- protected void encode(ChannelHandlerContext ctx, Object msg, List out) throws Exception {
- //该处返回空 改由主动发送
- try {
- if(msg==null || StrUtil.isEmptyIfStr(msg)){
- ByteBuf buf = Unpooled.copiedBuffer("".getBytes(CharsetUtil.UTF_8));
- out.add(buf);
- ctx.flush();
- return;
- }
- if(msg instanceof DefaultAddressedEnvelope){
- if(((DefaultAddressedEnvelope<?, ?>) msg).content() instanceof byte[]){
- out.add(Unpooled.copiedBuffer((byte[]) ((DefaultAddressedEnvelope<?, ?>) msg).content()));
- }else{
- out.add(Unpooled.copiedBuffer(((DefaultAddressedEnvelope<?, ?>) msg).content().toString().getBytes(StandardCharsets.UTF_8)));
- }
- } else if(msg instanceof ByteBuf){
- out.add(Unpooled.copiedBuffer((ByteBuf) msg));
- }else{
- ByteBuf buf = Unpooled.copiedBuffer("".getBytes(CharsetUtil.UTF_8));
- out.add(buf);
- }
- }catch (Exception e){}finally {
- ctx.flush();
- }
- }
- }
|