Home / Class/ MessageToMessageCodec Class — netty Architecture

MessageToMessageCodec Class — netty Architecture

Architecture documentation for the MessageToMessageCodec class in MessageToMessageCodec.java from the netty codebase.

Entity Profile

Dependency Diagram

graph TD
  fc8cac05_d096_fb13_e83d_f0ceda4e3d25["MessageToMessageCodec"]
  91fa86ba_df92_245d_54bd_7be8c2617137["MessageToMessageCodec.java"]
  fc8cac05_d096_fb13_e83d_f0ceda4e3d25 -->|defined in| 91fa86ba_df92_245d_54bd_7be8c2617137
  ba89d6b4_2aed_f790_6dc1_94df775cba2e["MessageToMessageCodec()"]
  fc8cac05_d096_fb13_e83d_f0ceda4e3d25 -->|method| ba89d6b4_2aed_f790_6dc1_94df775cba2e
  6f7dc8b8_536c_7150_c274_43985dd4f57a["channelRead()"]
  fc8cac05_d096_fb13_e83d_f0ceda4e3d25 -->|method| 6f7dc8b8_536c_7150_c274_43985dd4f57a
  a2ab41cd_b0f0_d35f_b3cf_d0429f58b618["channelReadComplete()"]
  fc8cac05_d096_fb13_e83d_f0ceda4e3d25 -->|method| a2ab41cd_b0f0_d35f_b3cf_d0429f58b618
  2fce0cbe_472e_5249_b7e2_4af723fb9e08["write()"]
  fc8cac05_d096_fb13_e83d_f0ceda4e3d25 -->|method| 2fce0cbe_472e_5249_b7e2_4af723fb9e08
  222b45d4_c478_33aa_c8f6_f4618dfbf544["acceptInboundMessage()"]
  fc8cac05_d096_fb13_e83d_f0ceda4e3d25 -->|method| 222b45d4_c478_33aa_c8f6_f4618dfbf544
  e9d5288b_6a2c_8881_4518_57ab16ea8031["acceptOutboundMessage()"]
  fc8cac05_d096_fb13_e83d_f0ceda4e3d25 -->|method| e9d5288b_6a2c_8881_4518_57ab16ea8031
  da12f684_f0df_e11f_c1ef_325f2f242826["encode()"]
  fc8cac05_d096_fb13_e83d_f0ceda4e3d25 -->|method| da12f684_f0df_e11f_c1ef_325f2f242826
  e4310a59_ff63_7a18_41b5_261a83b66d5a["decode()"]
  fc8cac05_d096_fb13_e83d_f0ceda4e3d25 -->|method| e4310a59_ff63_7a18_41b5_261a83b66d5a

Relationship Graph

Source Code

codec-base/src/main/java/io/netty/handler/codec/MessageToMessageCodec.java lines 55–162

public abstract class MessageToMessageCodec<INBOUND_IN, OUTBOUND_IN> extends ChannelDuplexHandler {

    private final MessageToMessageDecoder<Object> decoder = new MessageToMessageDecoder<Object>(Object.class) {

        @Override
        public boolean acceptInboundMessage(Object msg) throws Exception {
            return MessageToMessageCodec.this.acceptInboundMessage(msg);
        }

        @Override
        @SuppressWarnings("unchecked")
        protected void decode(ChannelHandlerContext ctx, Object msg, List<Object> out) throws Exception {
            MessageToMessageCodec.this.decode(ctx, (INBOUND_IN) msg, out);
        }

        @Override
        public boolean isSharable() {
            return MessageToMessageCodec.this.isSharable();
        }
    };
    private final MessageToMessageEncoder<Object> encoder = new MessageToMessageEncoder<Object>(Object.class) {

        @Override
        public boolean acceptOutboundMessage(Object msg) throws Exception {
            return MessageToMessageCodec.this.acceptOutboundMessage(msg);
        }

        @Override
        @SuppressWarnings("unchecked")
        protected void encode(ChannelHandlerContext ctx, Object msg, List<Object> out) throws Exception {
            MessageToMessageCodec.this.encode(ctx, (OUTBOUND_IN) msg, out);
        }

        @Override
        public boolean isSharable() {
            return MessageToMessageCodec.this.isSharable();
        }
    };

    private final TypeParameterMatcher inboundMsgMatcher;
    private final TypeParameterMatcher outboundMsgMatcher;

    /**
     * Create a new instance which will try to detect the types to decode and encode out of the type parameter
     * of the class.
     */
    protected MessageToMessageCodec() {
        inboundMsgMatcher = TypeParameterMatcher.find(this, MessageToMessageCodec.class, "INBOUND_IN");
        outboundMsgMatcher = TypeParameterMatcher.find(this, MessageToMessageCodec.class, "OUTBOUND_IN");
    }

    /**
     * Create a new instance.
     *
     * @param inboundMessageType    The type of messages to decode
     * @param outboundMessageType   The type of messages to encode
     */
    protected MessageToMessageCodec(
            Class<? extends INBOUND_IN> inboundMessageType, Class<? extends OUTBOUND_IN> outboundMessageType) {
        inboundMsgMatcher = TypeParameterMatcher.get(inboundMessageType);
        outboundMsgMatcher = TypeParameterMatcher.get(outboundMessageType);
    }

    @Override
    public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
        decoder.channelRead(ctx, msg);
    }

    @Override
    public void channelReadComplete(ChannelHandlerContext ctx) throws Exception {
        decoder.channelReadComplete(ctx);
    }

    @Override
    public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception {
        encoder.write(ctx, msg, promise);
    }

    /**
     * Returns {@code true} if and only if the specified message can be decoded by this codec.
     *

Frequently Asked Questions

What is the MessageToMessageCodec class?
MessageToMessageCodec is a class in the netty codebase, defined in codec-base/src/main/java/io/netty/handler/codec/MessageToMessageCodec.java.
Where is MessageToMessageCodec defined?
MessageToMessageCodec is defined in codec-base/src/main/java/io/netty/handler/codec/MessageToMessageCodec.java at line 55.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free