Encode.java 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. package org.dromara.netty;
  2. import cn.hutool.core.util.CharsetUtil;
  3. import cn.hutool.core.util.StrUtil;
  4. import io.netty.buffer.ByteBuf;
  5. import io.netty.buffer.Unpooled;
  6. import io.netty.channel.ChannelHandlerContext;
  7. import io.netty.channel.ChannelPromise;
  8. import io.netty.channel.DefaultAddressedEnvelope;
  9. import io.netty.handler.codec.MessageToMessageEncoder;
  10. import java.net.SocketAddress;
  11. import java.nio.charset.StandardCharsets;
  12. import java.util.List;
  13. public class Encode extends MessageToMessageEncoder {
  14. @Override
  15. public void connect(ChannelHandlerContext ctx, SocketAddress remoteAddress, SocketAddress localAddress, ChannelPromise promise) throws Exception {
  16. super.connect(ctx, remoteAddress, localAddress, promise);
  17. }
  18. @Override
  19. public void disconnect(ChannelHandlerContext ctx, ChannelPromise promise) throws Exception {
  20. super.disconnect(ctx, promise);
  21. }
  22. @Override
  23. public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception {
  24. super.write(ctx, msg, promise);
  25. }
  26. @Override
  27. protected void encode(ChannelHandlerContext ctx, Object msg, List out) throws Exception {
  28. //该处返回空 改由主动发送
  29. try {
  30. if(msg==null || StrUtil.isEmptyIfStr(msg)){
  31. ByteBuf buf = Unpooled.copiedBuffer("".getBytes(CharsetUtil.UTF_8));
  32. out.add(buf);
  33. ctx.flush();
  34. return;
  35. }
  36. if(msg instanceof DefaultAddressedEnvelope){
  37. if(((DefaultAddressedEnvelope<?, ?>) msg).content() instanceof byte[]){
  38. out.add(Unpooled.copiedBuffer((byte[]) ((DefaultAddressedEnvelope<?, ?>) msg).content()));
  39. }else{
  40. out.add(Unpooled.copiedBuffer(((DefaultAddressedEnvelope<?, ?>) msg).content().toString().getBytes(StandardCharsets.UTF_8)));
  41. }
  42. } else if(msg instanceof ByteBuf){
  43. out.add(Unpooled.copiedBuffer((ByteBuf) msg));
  44. }else{
  45. ByteBuf buf = Unpooled.copiedBuffer("".getBytes(CharsetUtil.UTF_8));
  46. out.add(buf);
  47. }
  48. }catch (Exception e){}finally {
  49. ctx.flush();
  50. }
  51. }
  52. }