Home / Class/ MessageAggregator Class — netty Architecture

MessageAggregator Class — netty Architecture

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

Entity Profile

Dependency Diagram

graph TD
  5eb281df_9169_db16_7477_6d4eba81b483["MessageAggregator"]
  b3cc9a4d_0fb6_87cc_36dc_dcbd2feedd7d["MessageAggregator.java"]
  5eb281df_9169_db16_7477_6d4eba81b483 -->|defined in| b3cc9a4d_0fb6_87cc_36dc_dcbd2feedd7d
  a043e681_a1c4_23f1_fc52_c0f4543dcccf["MessageAggregator()"]
  5eb281df_9169_db16_7477_6d4eba81b483 -->|method| a043e681_a1c4_23f1_fc52_c0f4543dcccf
  40d1fbbb_d167_5496_9ab4_3859ccd83ca3["validateMaxContentLength()"]
  5eb281df_9169_db16_7477_6d4eba81b483 -->|method| 40d1fbbb_d167_5496_9ab4_3859ccd83ca3
  60997f72_c177_04c0_4b40_8ed28c5e39c3["acceptInboundMessage()"]
  5eb281df_9169_db16_7477_6d4eba81b483 -->|method| 60997f72_c177_04c0_4b40_8ed28c5e39c3
  f9f29fd5_8673_9f39_7bed_e6273210b004["isStartMessage()"]
  5eb281df_9169_db16_7477_6d4eba81b483 -->|method| f9f29fd5_8673_9f39_7bed_e6273210b004
  a33e4e9a_5ecb_c862_7f93_67c1ae40c65f["isContentMessage()"]
  5eb281df_9169_db16_7477_6d4eba81b483 -->|method| a33e4e9a_5ecb_c862_7f93_67c1ae40c65f
  c0941375_911e_6122_f744_1a1d343f1b9a["isLastContentMessage()"]
  5eb281df_9169_db16_7477_6d4eba81b483 -->|method| c0941375_911e_6122_f744_1a1d343f1b9a
  8839942e_d0fc_2283_17b2_9c74a29b4ed8["isAggregated()"]
  5eb281df_9169_db16_7477_6d4eba81b483 -->|method| 8839942e_d0fc_2283_17b2_9c74a29b4ed8
  7718bdcb_2e06_5e80_ee52_70be32af0647["maxContentLength()"]
  5eb281df_9169_db16_7477_6d4eba81b483 -->|method| 7718bdcb_2e06_5e80_ee52_70be32af0647
  3e5a3d6c_9af5_ce7c_220f_d1a0c5ad95d8["maxCumulationBufferComponents()"]
  5eb281df_9169_db16_7477_6d4eba81b483 -->|method| 3e5a3d6c_9af5_ce7c_220f_d1a0c5ad95d8
  3d340ce9_7b2c_72f4_0ca5_49624abd1f07["setMaxCumulationBufferComponents()"]
  5eb281df_9169_db16_7477_6d4eba81b483 -->|method| 3d340ce9_7b2c_72f4_0ca5_49624abd1f07
  8b5d7e8e_6d3d_4633_00c3_4fb19cd3e287["isHandlingOversizedMessage()"]
  5eb281df_9169_db16_7477_6d4eba81b483 -->|method| 8b5d7e8e_6d3d_4633_00c3_4fb19cd3e287
  80c1ee08_904f_e6d6_63f7_c79f42a0524e["ChannelHandlerContext()"]
  5eb281df_9169_db16_7477_6d4eba81b483 -->|method| 80c1ee08_904f_e6d6_63f7_c79f42a0524e
  86b22ee5_e15b_7a0f_a36e_3fe8070d24aa["decode()"]
  5eb281df_9169_db16_7477_6d4eba81b483 -->|method| 86b22ee5_e15b_7a0f_a36e_3fe8070d24aa

Relationship Graph

Source Code

codec-base/src/main/java/io/netty/handler/codec/MessageAggregator.java lines 52–468

public abstract class MessageAggregator<I, S, C extends ByteBufHolder, O extends ByteBufHolder>
        extends MessageToMessageDecoder<I> {

    private static final int DEFAULT_MAX_COMPOSITEBUFFER_COMPONENTS = 1024;

    private final int maxContentLength;
    private O currentMessage;
    private boolean handlingOversizedMessage;

    private int maxCumulationBufferComponents = DEFAULT_MAX_COMPOSITEBUFFER_COMPONENTS;
    private ChannelHandlerContext ctx;
    private ChannelFutureListener continueResponseWriteListener;

    private boolean aggregating;
    private boolean handleIncompleteAggregateDuringClose = true;

    /**
     * Creates a new instance.
     *
     * @param maxContentLength
     *        the maximum length of the aggregated content.
     *        If the length of the aggregated content exceeds this value,
     *        {@link #handleOversizedMessage(ChannelHandlerContext, Object)} will be called.
     */
    protected MessageAggregator(int maxContentLength) {
        validateMaxContentLength(maxContentLength);
        this.maxContentLength = maxContentLength;
    }

    protected MessageAggregator(int maxContentLength, Class<? extends I> inboundMessageType) {
        super(inboundMessageType);
        validateMaxContentLength(maxContentLength);
        this.maxContentLength = maxContentLength;
    }

    private static void validateMaxContentLength(int maxContentLength) {
        checkPositiveOrZero(maxContentLength, "maxContentLength");
    }

    @Override
    public boolean acceptInboundMessage(Object msg) throws Exception {
        // No need to match last and full types because they are subset of first and middle types.
        if (!super.acceptInboundMessage(msg)) {
            return false;
        }

        @SuppressWarnings("unchecked")
        I in = (I) msg;

        if (isAggregated(in)) {
            return false;
        }

        // NOTE: It's tempting to make this check only if aggregating is false. There are however
        // side conditions in decode(...) in respect to large messages.
        if (isStartMessage(in)) {
            return true;
        } else {
            return aggregating && isContentMessage(in);
        }
    }

    /**
     * Returns {@code true} if and only if the specified message is a start message. Typically, this method is
     * implemented as a single {@code return} statement with {@code instanceof}:
     * <pre>
     * return msg instanceof MyStartMessage;
     * </pre>
     */
    protected abstract boolean isStartMessage(I msg) throws Exception;

    /**
     * Returns {@code true} if and only if the specified message is a content message. Typically, this method is
     * implemented as a single {@code return} statement with {@code instanceof}:
     * <pre>
     * return msg instanceof MyContentMessage;
     * </pre>
     */
    protected abstract boolean isContentMessage(I msg) throws Exception;

    /**

Frequently Asked Questions

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

Analyze Your Own Codebase

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

Try Supermodel Free