class SocketTransport implements NettyServer.ProtocolInitializer {

    @Override
    public ChannelInitializer<Channel> channelInitializer()
    {
        return new ChannelInitializer<Channel>()
        {
            @Override
            public void initChannel( Channel ch )
            {
                ch.config().setAllocator( PooledByteBufAllocator.DEFAULT );

                BoltChannel boltChannel = newBoltChannel( ch );
                connectionTracker.add( boltChannel );
                ch.closeFuture().addListener( future -> connectionTracker.remove( boltChannel ) );

                // install throttles
                throttleGroup.install( ch );

                // add a close listener that will uninstall throttles
                ch.closeFuture().addListener( future -> throttleGroup.uninstall( ch ) );

                TransportSelectionHandler transportSelectionHandler = new TransportSelectionHandler( boltChannel, sslCtx,
                        encryptionRequired, false, logging, boltProtocolFactory );

                ch.pipeline().addLast( transportSelectionHandler );
            }
        };
    }

    public  SocketTransport( String connector, ListenSocketAddress address, SslContext sslCtx, boolean encryptionRequired,
            LogProvider logging, TransportThrottleGroup throttleGroup,
            BoltProtocolFactory boltProtocolFactory, NetworkConnectionTracker connectionTracker );

}