Home / Class/ AbstractNioMessageChannel Class — netty Architecture

AbstractNioMessageChannel Class — netty Architecture

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

Entity Profile

Dependency Diagram

graph TD
  3260bc77_49cf_96c1_baa9_dd1de8d3603d["AbstractNioMessageChannel"]
  7f2b3e34_70a9_a8fb_c486_84a47e9eb723["AbstractNioMessageChannel.java"]
  3260bc77_49cf_96c1_baa9_dd1de8d3603d -->|defined in| 7f2b3e34_70a9_a8fb_c486_84a47e9eb723
  417ea249_bbfd_0c66_4e3f_419410495b42["AbstractNioMessageChannel()"]
  3260bc77_49cf_96c1_baa9_dd1de8d3603d -->|method| 417ea249_bbfd_0c66_4e3f_419410495b42
  28b976c2_c739_38a6_a259_098b2edbc3dc["AbstractNioUnsafe()"]
  3260bc77_49cf_96c1_baa9_dd1de8d3603d -->|method| 28b976c2_c739_38a6_a259_098b2edbc3dc
  7759b8e8_1674_b51a_b172_960bf7b78ca9["doBeginRead()"]
  3260bc77_49cf_96c1_baa9_dd1de8d3603d -->|method| 7759b8e8_1674_b51a_b172_960bf7b78ca9
  30f77b55_de75_10f5_d16f_00f319f9f672["continueReading()"]
  3260bc77_49cf_96c1_baa9_dd1de8d3603d -->|method| 30f77b55_de75_10f5_d16f_00f319f9f672
  b39d151a_1b5e_b4c9_00be_5f3fea45bd5e["doWrite()"]
  3260bc77_49cf_96c1_baa9_dd1de8d3603d -->|method| b39d151a_1b5e_b4c9_00be_5f3fea45bd5e
  a859d149_53dc_be2e_3b04_8abd3f6e153e["continueOnWriteError()"]
  3260bc77_49cf_96c1_baa9_dd1de8d3603d -->|method| a859d149_53dc_be2e_3b04_8abd3f6e153e
  41047431_2be4_b405_cf1b_592f5cad83f1["closeOnReadError()"]
  3260bc77_49cf_96c1_baa9_dd1de8d3603d -->|method| 41047431_2be4_b405_cf1b_592f5cad83f1
  913da49c_1ef4_7f1a_749e_fe98a9bad805["doReadMessages()"]
  3260bc77_49cf_96c1_baa9_dd1de8d3603d -->|method| 913da49c_1ef4_7f1a_749e_fe98a9bad805
  5ee130a6_7b77_fff4_473e_feb1f2786d0f["doWriteMessage()"]
  3260bc77_49cf_96c1_baa9_dd1de8d3603d -->|method| 5ee130a6_7b77_fff4_473e_feb1f2786d0f

Relationship Graph

Source Code

transport/src/main/java/io/netty/channel/nio/AbstractNioMessageChannel.java lines 34–207

public abstract class AbstractNioMessageChannel extends AbstractNioChannel {
    boolean inputShutdown;

    /**
     * @see AbstractNioChannel#AbstractNioChannel(Channel, SelectableChannel, int)
     */
    protected AbstractNioMessageChannel(Channel parent, SelectableChannel ch, int readInterestOp) {
        super(parent, ch, readInterestOp);
    }

    protected AbstractNioMessageChannel(Channel parent, SelectableChannel ch, NioIoOps readOps) {
        super(parent, ch, readOps);
    }

    @Override
    protected AbstractNioUnsafe newUnsafe() {
        return new NioMessageUnsafe();
    }

    @Override
    protected void doBeginRead() throws Exception {
        if (inputShutdown) {
            return;
        }
        super.doBeginRead();
    }

    protected boolean continueReading(RecvByteBufAllocator.Handle allocHandle) {
        return allocHandle.continueReading();
    }

    private final class NioMessageUnsafe extends AbstractNioUnsafe {

        private final List<Object> readBuf = new ArrayList<Object>();

        @Override
        public void read() {
            assert eventLoop().inEventLoop();
            final ChannelConfig config = config();
            final ChannelPipeline pipeline = pipeline();
            final RecvByteBufAllocator.Handle allocHandle = unsafe().recvBufAllocHandle();
            allocHandle.reset(config);

            boolean closed = false;
            Throwable exception = null;
            try {
                try {
                    do {
                        int localRead = doReadMessages(readBuf);
                        if (localRead == 0) {
                            break;
                        }
                        if (localRead < 0) {
                            closed = true;
                            break;
                        }

                        allocHandle.incMessagesRead(localRead);
                    } while (continueReading(allocHandle));
                } catch (Throwable t) {
                    exception = t;
                }

                int size = readBuf.size();
                for (int i = 0; i < size; i ++) {
                    readPending = false;
                    pipeline.fireChannelRead(readBuf.get(i));
                }
                readBuf.clear();
                allocHandle.readComplete();
                pipeline.fireChannelReadComplete();

                if (exception != null) {
                    closed = closeOnReadError(exception);

                    pipeline.fireExceptionCaught(exception);
                }

                if (closed) {
                    inputShutdown = true;
                    if (isOpen()) {

Frequently Asked Questions

What is the AbstractNioMessageChannel class?
AbstractNioMessageChannel is a class in the netty codebase, defined in transport/src/main/java/io/netty/channel/nio/AbstractNioMessageChannel.java.
Where is AbstractNioMessageChannel defined?
AbstractNioMessageChannel is defined in transport/src/main/java/io/netty/channel/nio/AbstractNioMessageChannel.java at line 34.

Analyze Your Own Codebase

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

Try Supermodel Free