code: public void startListening() {
          // Configure SSL.
          final SslContext sslCtx;
          if (ssl) {
              try {
                  sslCtx = SslContextBuilder.forServer(new File(this.certFile), new File(this.keyFile)).build();
              } catch (SSLException e) {
                  throw new RuntimeException(e);
              }
          } else {
              sslCtx = null;
          }
          boolean nio = false;
          try {
              bossGroup = new EpollEventLoopGroup(1);
              workerGroup = new EpollEventLoopGroup();
          } catch (ExceptionInInitializerError | UnsatisfiedLinkError | NoClassDefFoundError e) {
              nio = true;
              bossGroup = new NioEventLoopGroup(1);
              workerGroup = new NioEventLoopGroup();
          }
  
          ServerBootstrap b = new ServerBootstrap();
          b.group(bossGroup, workerGroup)
           .channel(nio ? NioServerSocketChannel.class : EpollServerSocketChannel.class)
           .option(ChannelOption.SO_BACKLOG, 100)
           .handler(new LoggingHandler(LogLevel.INFO))
           .childHandler(new ChannelInitializer<SocketChannel>() {
               @Override
               public void initChannel(SocketChannel ch) throws Exception {
                   ChannelPipeline p = ch.pipeline();
                   if (sslCtx != null) {
                       SslHandler handler = sslCtx.newHandler(ch.alloc());
                       p.addLast(handler);
                   }
                   ServerConnectionInboundHandler lsh = new ServerConnectionInboundHandler();
                   p.addLast(new ExceptionLoggingHandler(ch.remoteAddress().toString()),
                           new CommandEncoder(null),
                           new LengthFieldBasedFrameDecoder(MAX_WIRECOMMAND_SIZE, 4, 4),
                           new CommandDecoder(),
                           new AppendDecoder(),
                           lsh);
                   lsh.setRequestProcessor(new AppendProcessor(store,
                           lsh,
                           new PravegaRequestProcessor(store, tableStore, lsh, statsRecorder, tableStatsRecorder, tokenVerifier, replyWithStackTraceOnError),
                           statsRecorder,
                           tokenVerifier,
                           replyWithStackTraceOnError));
               }
           });
  
          // Start the server.
          serverChannel = b.bind(host, port).awaitUninterruptibly().channel();
      }
docs: endregion