Home / Class/ Server Class — netty Architecture

Server Class — netty Architecture

Architecture documentation for the Server class in UDTClientServerConnectionTest.java from the netty codebase.

Entity Profile

Dependency Diagram

graph TD
  89c0e406_7a8e_03fe_792e_9782b3deaad6["Server"]
  f3540ce4_30eb_36e3_f952_e84f7d4af406["UDTClientServerConnectionTest.java"]
  89c0e406_7a8e_03fe_792e_9782b3deaad6 -->|defined in| f3540ce4_30eb_36e3_f952_e84f7d4af406
  59192b2b_0b17_9997_b432_7ae855241154["Server()"]
  89c0e406_7a8e_03fe_792e_9782b3deaad6 -->|method| 59192b2b_0b17_9997_b432_7ae855241154
  15c7489b_6c9b_a2f1_adb8_b6985fa97a5b["run()"]
  89c0e406_7a8e_03fe_792e_9782b3deaad6 -->|method| 15c7489b_6c9b_a2f1_adb8_b6985fa97a5b
  a0134c18_fe0e_5eb1_f2a3_def1ef7cc27e["shutdown()"]
  89c0e406_7a8e_03fe_792e_9782b3deaad6 -->|method| a0134c18_fe0e_5eb1_f2a3_def1ef7cc27e
  d5ad0d45_ae71_a7dc_a011_d131fc7e1b17["waitForActive()"]
  89c0e406_7a8e_03fe_792e_9782b3deaad6 -->|method| d5ad0d45_ae71_a7dc_a011_d131fc7e1b17
  399d2beb_f25f_0671_070a_9d1160f03487["waitForRunning()"]
  89c0e406_7a8e_03fe_792e_9782b3deaad6 -->|method| 399d2beb_f25f_0671_070a_9d1160f03487
  6b262873_d5f3_7d06_8c3b_8f45cad9f1bf["waitForShutdown()"]
  89c0e406_7a8e_03fe_792e_9782b3deaad6 -->|method| 6b262873_d5f3_7d06_8c3b_8f45cad9f1bf

Relationship Graph

Source Code

testsuite/src/main/java/io/netty/testsuite/transport/udt/UDTClientServerConnectionTest.java lines 182–281

    static class Server implements Runnable {

        static final Logger log = LoggerFactory.getLogger(Server.class);

        final ChannelGroup group = new DefaultChannelGroup("server group", GlobalEventExecutor.INSTANCE);

        private final InetSocketAddress address;

        volatile Channel channel;
        volatile boolean isRunning;
        volatile boolean isShutdown;

        Server(InetSocketAddress address) {
            this.address = address;
        }

        @Override
        public void run() {
            final ServerBootstrap boot = new ServerBootstrap();
            final ThreadFactory factory = new DefaultThreadFactory("udp");
            final EventLoopGroup eventLoopGroup = new MultiThreadIoEventLoopGroup(1,
                    factory, NioIoHandler.newFactory(NioUdtProvider.BYTE_PROVIDER));
            try {
                boot.group(eventLoopGroup)
                        .channelFactory(NioUdtProvider.BYTE_ACCEPTOR)
                        .childHandler(new ChannelInitializer<UdtChannel>() {
                            @Override
                            protected void initChannel(final UdtChannel ch)
                                    throws Exception {
                                final ChannelPipeline pipeline = ch.pipeline();
                                pipeline.addLast("framer",
                                        new DelimiterBasedFrameDecoder(8192,
                                                Delimiters.lineDelimiter()));
                                pipeline.addLast("decoder", new StringDecoder(
                                        CharsetUtil.UTF_8));
                                pipeline.addLast("encoder", new StringEncoder(
                                        CharsetUtil.UTF_8));
                                pipeline.addLast("handler", new ServerHandler(
                                        group));
                            }
                        });
                channel = boot.bind(address).sync().channel();
                isRunning = true;
                log.info("Server ready.");
                waitForRunning(false);
                log.info("Server closing acceptor...");
                channel.close().sync();
                log.info("Server closing connectors...");
                group.close().sync();
                isShutdown = true;
                log.info("Server is done.");
            } catch (final Throwable e) {
                log.error("Server failure.", e);
            } finally {
                eventLoopGroup.shutdownGracefully();
                eventLoopGroup.terminationFuture().syncUninterruptibly();
            }
        }

        void shutdown() {
            isRunning = false;
        }

        void waitForActive(final boolean isActive) throws Exception {
            for (int k = 0; k < WAIT_COUNT; k++) {
                Thread.sleep(WAIT_SLEEP);
                if (isActive) {
                    for (final Channel channel : group) {
                        final ServerHandler handler = channel.pipeline().get(
                                ServerHandler.class);
                        if (handler != null && handler.isActive) {
                            return;
                        }
                    }
                } else {
                    if (group.isEmpty()) {
                        return;
                    }
                }
            }
        }

Frequently Asked Questions

What is the Server class?
Server is a class in the netty codebase, defined in testsuite/src/main/java/io/netty/testsuite/transport/udt/UDTClientServerConnectionTest.java.
Where is Server defined?
Server is defined in testsuite/src/main/java/io/netty/testsuite/transport/udt/UDTClientServerConnectionTest.java at line 182.

Analyze Your Own Codebase

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

Try Supermodel Free