public XioServerBootstrap addToPipeline(XioPipelineFragment fragment) { // TODO(CK): interrogate fragment for channel options pipelineAssembler.addFragment(fragment); return this; }
@Override public void initChannel(SocketChannel channel) { pipelineAssembler.buildHandlers(channel.pipeline()); } }
public XioChannelInitializer build(XioServerInstrumentation instrumentation) { for (XioPipelineFragment fragment : fragments) { String protocol = fragment.applicationProtocol(); if (protocol != null) { if (instrumentation.applicationProtocol != null) { throw new RuntimeException( "Only one application protocol can be defined for a given pipeline"); } instrumentation.applicationProtocol = protocol; } } return buildInitializer(); } }
public XioServer build() { log.debug("Building"); serverBootstrap.group(channelConfig.bossGroup(), channelConfig.workerGroup()); serverBootstrap.channel(channelConfig.channel()); final XioServerInstrumentation instrumentation = new XioServerInstrumentation(); serverBootstrap.childHandler(pipelineAssembler.build(instrumentation)); ChannelFuture future = serverBootstrap.bind(); future.awaitUninterruptibly(); if (future.isSuccess()) { instrumentation.addressBound = (InetSocketAddress) future.channel().localAddress(); } else { log.error("Couldn't bind channel", future.cause()); throw new RuntimeException(future.cause()); } return new XioServer(future.channel(), instrumentation, config, state); } }
public XioServerBootstrap( ApplicationState appState, XioServerConfig config, XioServerState state) { serverBootstrap = new ServerBootstrap(); pipelineAssembler = new XioPipelineAssembler(appState, config, state); this.config = config; this.state = state; if (XioServiceLocator.getInstance() == null) { XioServiceLocator.buildInstance(appState.config(), appState); } bindAddress(config.getBindAddress()); channelConfig(appState.getChannelConfiguration()); }