Home / Class/ MessageForwarder1 Class — netty Architecture

MessageForwarder1 Class — netty Architecture

Architecture documentation for the MessageForwarder1 class in LocalTransportThreadModelTest.java from the netty codebase.

Entity Profile

Dependency Diagram

graph TD
  5541dc33_efde_3aa6_67b2_db159b8c2440["MessageForwarder1"]
  adb139e6_2a46_ab0a_b143_d2609be299b3["LocalTransportThreadModelTest.java"]
  5541dc33_efde_3aa6_67b2_db159b8c2440 -->|defined in| adb139e6_2a46_ab0a_b143_d2609be299b3
  21df8cff_661b_dc5c_d5ca_b938b93a4e5c["channelRead()"]
  5541dc33_efde_3aa6_67b2_db159b8c2440 -->|method| 21df8cff_661b_dc5c_d5ca_b938b93a4e5c
  9027c75a_851a_b1c4_43a2_4391857f5910["write()"]
  5541dc33_efde_3aa6_67b2_db159b8c2440 -->|method| 9027c75a_851a_b1c4_43a2_4391857f5910
  f9091750_0f54_bbcf_d1f3_7bb21c9f84d7["exceptionCaught()"]
  5541dc33_efde_3aa6_67b2_db159b8c2440 -->|method| f9091750_0f54_bbcf_d1f3_7bb21c9f84d7

Relationship Graph

Source Code

transport/src/test/java/io/netty/channel/local/LocalTransportThreadModelTest.java lines 416–469

    private static class MessageForwarder1 extends ChannelDuplexHandler {

        private final AtomicReference<Throwable> exception = new AtomicReference<Throwable>();
        private volatile int inCnt;
        private volatile int outCnt;
        private volatile Thread t;

        @Override
        public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
            Thread t = this.t;
            if (t == null) {
                this.t = Thread.currentThread();
            } else {
                assertSame(t, Thread.currentThread());
            }

            ByteBuf out = ctx.alloc().buffer(4);
            int m = ((Integer) msg).intValue();
            int expected = inCnt ++;
            assertEquals(expected, m);
            out.writeInt(m);

            ctx.fireChannelRead(out);
        }

        @Override
        public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception {
            assertSame(t, Thread.currentThread());

            // Don't let the write request go to the server-side channel - just swallow.
            boolean swallow = this == ctx.pipeline().first();

            ByteBuf m = (ByteBuf) msg;
            int count = m.readableBytes() / 4;
            for (int j = 0; j < count; j ++) {
                int actual = m.readInt();
                int expected = outCnt ++;
                assertEquals(expected, actual);
                if (!swallow) {
                    ctx.write(actual);
                }
            }
            ctx.writeAndFlush(Unpooled.EMPTY_BUFFER, promise);
            m.release();
        }

        @Override
        public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
            exception.compareAndSet(null, cause);
            //System.err.print("[" + Thread.currentThread().getName() + "] ");
            //cause.printStackTrace();
            super.exceptionCaught(ctx, cause);
        }
    }

Frequently Asked Questions

What is the MessageForwarder1 class?
MessageForwarder1 is a class in the netty codebase, defined in transport/src/test/java/io/netty/channel/local/LocalTransportThreadModelTest.java.
Where is MessageForwarder1 defined?
MessageForwarder1 is defined in transport/src/test/java/io/netty/channel/local/LocalTransportThreadModelTest.java at line 416.

Analyze Your Own Codebase

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

Try Supermodel Free