Home / Class/ LocalServerChannel Class — netty Architecture

LocalServerChannel Class — netty Architecture

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

Entity Profile

Dependency Diagram

graph TD
  1a58c560_dde9_7403_e4d4_f9cf37a89c81["LocalServerChannel"]
  11c929d0_7ca3_0947_ae0d_0f0e8b8d65c0["LocalServerChannel.java"]
  1a58c560_dde9_7403_e4d4_f9cf37a89c81 -->|defined in| 11c929d0_7ca3_0947_ae0d_0f0e8b8d65c0
  5d680c76_e9ed_9c89_f038_511c9e5eda3d["LocalServerChannel()"]
  1a58c560_dde9_7403_e4d4_f9cf37a89c81 -->|method| 5d680c76_e9ed_9c89_f038_511c9e5eda3d
  3418b515_624c_efea_d609_87c8ed01cbd2["ChannelConfig()"]
  1a58c560_dde9_7403_e4d4_f9cf37a89c81 -->|method| 3418b515_624c_efea_d609_87c8ed01cbd2
  0c306a1a_e2ce_c7ca_2269_663e495ed7ba["LocalAddress()"]
  1a58c560_dde9_7403_e4d4_f9cf37a89c81 -->|method| 0c306a1a_e2ce_c7ca_2269_663e495ed7ba
  e9514e2a_e023_fcdb_976d_ae80f141d9fa["isOpen()"]
  1a58c560_dde9_7403_e4d4_f9cf37a89c81 -->|method| e9514e2a_e023_fcdb_976d_ae80f141d9fa
  a63e6e6d_2561_64cf_476e_40e2d1c20d54["isActive()"]
  1a58c560_dde9_7403_e4d4_f9cf37a89c81 -->|method| a63e6e6d_2561_64cf_476e_40e2d1c20d54
  b4e4f4da_86db_7339_8b13_065243946189["isCompatible()"]
  1a58c560_dde9_7403_e4d4_f9cf37a89c81 -->|method| b4e4f4da_86db_7339_8b13_065243946189
  87122335_cb1c_407f_a637_a8b74e940f7d["SocketAddress()"]
  1a58c560_dde9_7403_e4d4_f9cf37a89c81 -->|method| 87122335_cb1c_407f_a637_a8b74e940f7d
  f5b944d8_41ce_9b6b_87c6_8eb0f4c80bfe["doRegister()"]
  1a58c560_dde9_7403_e4d4_f9cf37a89c81 -->|method| f5b944d8_41ce_9b6b_87c6_8eb0f4c80bfe
  840d74b7_9c08_2cee_a797_98a8ec69ab67["doBind()"]
  1a58c560_dde9_7403_e4d4_f9cf37a89c81 -->|method| 840d74b7_9c08_2cee_a797_98a8ec69ab67
  9d50a269_d84f_672a_a3fb_cbe681d5c928["doClose()"]
  1a58c560_dde9_7403_e4d4_f9cf37a89c81 -->|method| 9d50a269_d84f_672a_a3fb_cbe681d5c928
  32c576d5_74e0_59ee_474b_32f6ab79d831["doDeregister()"]
  1a58c560_dde9_7403_e4d4_f9cf37a89c81 -->|method| 32c576d5_74e0_59ee_474b_32f6ab79d831
  ac807b6d_7c14_ae81_c681_496ac42f3bcf["doBeginRead()"]
  1a58c560_dde9_7403_e4d4_f9cf37a89c81 -->|method| ac807b6d_7c14_ae81_c681_496ac42f3bcf
  46a44862_0996_b204_4d9b_a4d28e78033a["LocalChannel()"]
  1a58c560_dde9_7403_e4d4_f9cf37a89c81 -->|method| 46a44862_0996_b204_4d9b_a4d28e78033a

Relationship Graph

Source Code

transport/src/main/java/io/netty/channel/local/LocalServerChannel.java lines 42–254

public class LocalServerChannel extends AbstractServerChannel {

    private final ChannelConfig config =
            new DefaultChannelConfig(this, new ServerChannelRecvByteBufAllocator()) { };
    private final Queue<Object> inboundBuffer = new ArrayDeque<Object>();
    private final Runnable shutdownHook = new Runnable() {
        @Override
        public void run() {
            unsafe().close(unsafe().voidPromise());
        }
    };

    private IoRegistration registration;

    private volatile int state; // 0 - open, 1 - active, 2 - closed
    private volatile LocalAddress localAddress;
    private volatile boolean acceptInProgress;

    public LocalServerChannel() {
        config().setAllocator(new PreferHeapByteBufAllocator(config.getAllocator()));
    }

    @Override
    public ChannelConfig config() {
        return config;
    }

    @Override
    public LocalAddress localAddress() {
        return (LocalAddress) super.localAddress();
    }

    @Override
    public LocalAddress remoteAddress() {
        return (LocalAddress) super.remoteAddress();
    }

    @Override
    public boolean isOpen() {
        return state < 2;
    }

    @Override
    public boolean isActive() {
        return state == 1;
    }

    @Override
    protected boolean isCompatible(EventLoop loop) {
        return loop instanceof SingleThreadEventLoop ||
                (loop instanceof IoEventLoopGroup && ((IoEventLoopGroup) loop).isCompatible(LocalServerUnsafe.class));
    }

    @Override
    protected SocketAddress localAddress0() {
        return localAddress;
    }

    @Override
    protected void doRegister(ChannelPromise promise) {
        EventLoop loop = eventLoop();
        if (loop instanceof IoEventLoop) {
            assert registration == null;
            ((IoEventLoop) loop).register((LocalServerUnsafe) unsafe()).addListener(f -> {
                if (f.isSuccess()) {
                    registration = (IoRegistration) f.getNow();
                    promise.setSuccess();
                } else {
                    promise.setFailure(f.cause());
                }
            });
        } else {
            try {
                ((LocalServerUnsafe) unsafe()).registered();
            } catch (Throwable cause) {
                promise.setFailure(cause);
                return;
            }
            promise.setSuccess();
        }
    }

Frequently Asked Questions

What is the LocalServerChannel class?
LocalServerChannel is a class in the netty codebase, defined in transport/src/main/java/io/netty/channel/local/LocalServerChannel.java.
Where is LocalServerChannel defined?
LocalServerChannel is defined in transport/src/main/java/io/netty/channel/local/LocalServerChannel.java at line 42.

Analyze Your Own Codebase

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

Try Supermodel Free