package io.scalecube.transport; import javax.annotation.concurrent.Immutable; /** * Encapsulate transport settings. * * @author Anton Kharenko */ @Immutable public final class TransportConfig { public static final String DEFAULT_LISTEN_ADDRESS = null; public static final String DEFAULT_LISTEN_INTERFACE = null; // Default listen settings fallback to getLocalHost public static final boolean DEFAULT_PREFER_IP6 = false; public static final int DEFAULT_PORT = 4801; public static final int DEFAULT_PORT_COUNT = 100; public static final boolean DEFAULT_PORT_AUTO_INCREMENT = true; public static final int DEFAULT_CONNECT_TIMEOUT = 3000; public static final boolean DEFAULT_USE_NETWORK_EMULATOR = false; public static final boolean DEFAULT_ENABLE_EPOLL = true; public static final int DEFAULT_BOSS_THREADS = 2; public static final int DEFAULT_WORKER_THREADS = 0; private final String listenAddress; private final String listenInterface; private final boolean preferIPv6; private final int port; private final int portCount; private final boolean portAutoIncrement; private final int connectTimeout; private final boolean useNetworkEmulator; private final boolean enableEpoll; private final int bossThreads; private final int workerThreads; private TransportConfig(Builder builder) { this.listenAddress = builder.listenAddress; this.listenInterface = builder.listenInterface; this.preferIPv6 = builder.preferIPv6; this.port = builder.port; this.portCount = builder.portCount; this.portAutoIncrement = builder.portAutoIncrement; this.connectTimeout = builder.connectTimeout; this.useNetworkEmulator = builder.useNetworkEmulator; this.enableEpoll = builder.enableEpoll; this.bossThreads = builder.bossThreads; this.workerThreads = builder.workerThreads; } public static TransportConfig defaultConfig() { return builder().build(); } public static Builder builder() { return new Builder(); } public String getListenAddress() { return listenAddress; } public String getListenInterface() { return listenInterface; } public boolean isPreferIPv6() { return preferIPv6; } public int getPort() { return port; } public int getPortCount() { return portCount; } public boolean isPortAutoIncrement() { return portAutoIncrement; } public int getConnectTimeout() { return connectTimeout; } public boolean isUseNetworkEmulator() { return useNetworkEmulator; } public boolean isEnableEpoll() { return enableEpoll; } public int getBossThreads() { return bossThreads; } public int getWorkerThreads() { return workerThreads; } @Override public String toString() { return "TransportConfig{listenAddress=" + listenAddress + ", listenInterface=" + listenInterface + ", preferIPv6=" + preferIPv6 + ", port=" + port + ", portCount=" + portCount + ", portAutoIncrement=" + portAutoIncrement + ", connectTimeout=" + connectTimeout + ", useNetworkEmulator=" + useNetworkEmulator + ", enableEpoll=" + enableEpoll + ", bossThreads=" + bossThreads + ", workerThreads=" + workerThreads + '}'; } public static final class Builder { private String listenAddress = DEFAULT_LISTEN_ADDRESS; private String listenInterface = DEFAULT_LISTEN_INTERFACE; private boolean preferIPv6 = DEFAULT_PREFER_IP6; private int port = DEFAULT_PORT; private int portCount = DEFAULT_PORT_COUNT; private boolean portAutoIncrement = DEFAULT_PORT_AUTO_INCREMENT; private boolean useNetworkEmulator = DEFAULT_USE_NETWORK_EMULATOR; private int connectTimeout = DEFAULT_CONNECT_TIMEOUT; private boolean enableEpoll = DEFAULT_ENABLE_EPOLL; private int bossThreads = DEFAULT_BOSS_THREADS; private int workerThreads = DEFAULT_WORKER_THREADS; private Builder() {} /** * Fills config with values equal to provided config. */ public Builder fillFrom(TransportConfig config) { this.listenAddress = config.listenAddress; this.listenInterface = config.listenInterface; this.preferIPv6 = config.preferIPv6; this.port = config.port; this.portCount = config.portCount; this.portAutoIncrement = config.portAutoIncrement; this.connectTimeout = config.connectTimeout; this.useNetworkEmulator = config.useNetworkEmulator; this.enableEpoll = config.enableEpoll; this.bossThreads = config.bossThreads; this.workerThreads = config.workerThreads; return this; } public Builder listenAddress(String listenAddress) { this.listenAddress = listenAddress; return this; } public Builder listenInterface(String listenInterface) { this.listenInterface = listenInterface; return this; } public Builder preferIPv6(boolean preferIPv6) { this.preferIPv6 = preferIPv6; return this; } public Builder port(int port) { this.port = port; return this; } public Builder portCount(int portCount) { this.portCount = portCount; return this; } public Builder portAutoIncrement(boolean portAutoIncrement) { this.portAutoIncrement = portAutoIncrement; return this; } public Builder connectTimeout(int connectTimeout) { this.connectTimeout = connectTimeout; return this; } public Builder useNetworkEmulator(boolean useNetworkEmulator) { this.useNetworkEmulator = useNetworkEmulator; return this; } public Builder enableEpoll(boolean enableEpoll) { this.enableEpoll = enableEpoll; return this; } public Builder bossThreads(int bossThreads) { this.bossThreads = bossThreads; return this; } public Builder workerThreads(int workerThreads) { this.workerThreads = workerThreads; return this; } public TransportConfig build() { return new TransportConfig(this); } } }