Home / Function/ allDataReadEventTriggeredAfterHalfClosure() — netty Function Reference

allDataReadEventTriggeredAfterHalfClosure() — netty Function Reference

Architecture documentation for the allDataReadEventTriggeredAfterHalfClosure() function in SocketHalfClosedTest.java from the netty codebase.

Function java Buffer Telemetry calls 3 called by 1

Entity Profile

Dependency Diagram

graph TD
  0257caf2_49bb_c678_4b3a_f599308c0f78["allDataReadEventTriggeredAfterHalfClosure()"]
  12fb37da_402f_660c_11c3_2383afda173c["SocketHalfClosedTest"]
  0257caf2_49bb_c678_4b3a_f599308c0f78 -->|defined in| 12fb37da_402f_660c_11c3_2383afda173c
  c562440a_8a60_0e56_4204_87fa7867fe78["testAllDataReadEventTriggeredAfterHalfClosure()"]
  c562440a_8a60_0e56_4204_87fa7867fe78 -->|calls| 0257caf2_49bb_c678_4b3a_f599308c0f78
  e10e4eef_7517_beb9_006a_70828f05ea78["channelActive()"]
  0257caf2_49bb_c678_4b3a_f599308c0f78 -->|calls| e10e4eef_7517_beb9_006a_70828f05ea78
  ed63ea02_ba7b_766c_f519_7df130ca8449["userEventTriggered()"]
  0257caf2_49bb_c678_4b3a_f599308c0f78 -->|calls| ed63ea02_ba7b_766c_f519_7df130ca8449
  9f0d148d_19fe_6f26_b8b9_17ac45fb4050["exceptionCaught()"]
  0257caf2_49bb_c678_4b3a_f599308c0f78 -->|calls| 9f0d148d_19fe_6f26_b8b9_17ac45fb4050
  style 0257caf2_49bb_c678_4b3a_f599308c0f78 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

testsuite/src/main/java/io/netty/testsuite/transport/socket/SocketHalfClosedTest.java lines 83–199

    private void allDataReadEventTriggeredAfterHalfClosure(ServerBootstrap sb, Bootstrap cb) throws Throwable {
        final int totalServerBytesWritten = 1;
        final CountDownLatch clientReadAllDataLatch = new CountDownLatch(1);
        final CountDownLatch clientHalfClosedLatch = new CountDownLatch(1);
        final CountDownLatch clientHalfClosedAllBytesRead = new CountDownLatch(1);
        final AtomicInteger clientReadCompletes = new AtomicInteger();
        final AtomicInteger clientZeroDataReadCompletes = new AtomicInteger();
        Channel serverChannel = null;
        Channel clientChannel = null;
        AtomicReference<Channel> serverChildChannel = new AtomicReference<>();
        try {
            cb.option(ChannelOption.ALLOW_HALF_CLOSURE, true)
                    .option(ChannelOption.AUTO_CLOSE, false)
                    .option(ChannelOption.AUTO_READ, false);

            sb.option(ChannelOption.ALLOW_HALF_CLOSURE, true)
                    .option(ChannelOption.AUTO_CLOSE, false)
                    .childOption(ChannelOption.TCP_NODELAY, true);

            sb.childHandler(new ChannelInitializer<Channel>() {
                @Override
                protected void initChannel(Channel ch) throws Exception {
                    serverChildChannel.set(ch);
                    ch.pipeline().addLast(new ChannelInboundHandlerAdapter() {
                        @Override
                        public void channelActive(ChannelHandlerContext ctx) throws Exception {
                            ByteBuf buf = ctx.alloc().buffer(totalServerBytesWritten);
                            buf.writerIndex(buf.capacity());
                            ctx.writeAndFlush(buf);
                        }

                        @Override
                        public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {
                            ctx.close();
                        }
                    });
                }
            });

            // client.
            cb.handler(new ChannelInitializer<Channel>() {
                @Override
                protected void initChannel(Channel ch) {
                    ch.pipeline().addLast(new ChannelInboundHandlerAdapter() {
                        private int bytesRead;
                        private int bytesSinceReadComplete;

                        @Override
                        public void channelRead(ChannelHandlerContext ctx, Object msg) {
                            ByteBuf buf = (ByteBuf) msg;
                            bytesRead += buf.readableBytes();
                            bytesSinceReadComplete += buf.readableBytes();
                            buf.release();
                        }

                        @Override
                        public void userEventTriggered(ChannelHandlerContext ctx, Object evt) {
                            if (evt == ChannelInputShutdownEvent.INSTANCE) {
                                clientHalfClosedLatch.countDown();
                            } else if (evt == ChannelInputShutdownReadComplete.INSTANCE) {
                                clientHalfClosedAllBytesRead.countDown();
                                ctx.close();
                            }
                        }

                        @Override
                        public void channelReadComplete(ChannelHandlerContext ctx) {
                            if (bytesSinceReadComplete == 0) {
                                clientZeroDataReadCompletes.incrementAndGet();
                            } else {
                                bytesSinceReadComplete = 0;
                            }
                            clientReadCompletes.incrementAndGet();
                            if (bytesRead == totalServerBytesWritten) {
                                // Bounce this through the event loop to make sure it happens after we're done
                                // with the read operation.
                                ch.eventLoop().execute(new Runnable() {
                                    @Override
                                    public void run() {
                                        clientReadAllDataLatch.countDown();
                                    }

Domain

Subdomains

Frequently Asked Questions

What does allDataReadEventTriggeredAfterHalfClosure() do?
allDataReadEventTriggeredAfterHalfClosure() is a function in the netty codebase, defined in testsuite/src/main/java/io/netty/testsuite/transport/socket/SocketHalfClosedTest.java.
Where is allDataReadEventTriggeredAfterHalfClosure() defined?
allDataReadEventTriggeredAfterHalfClosure() is defined in testsuite/src/main/java/io/netty/testsuite/transport/socket/SocketHalfClosedTest.java at line 83.
What does allDataReadEventTriggeredAfterHalfClosure() call?
allDataReadEventTriggeredAfterHalfClosure() calls 3 function(s): channelActive, exceptionCaught, userEventTriggered.
What calls allDataReadEventTriggeredAfterHalfClosure()?
allDataReadEventTriggeredAfterHalfClosure() is called by 1 function(s): testAllDataReadEventTriggeredAfterHalfClosure.

Analyze Your Own Codebase

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

Try Supermodel Free