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;
/**
Source
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