public static IServerBootstrapWrapper AddDiscardHandler <TChannelHandler>(this IServerBootstrapWrapper wrapper,
                                                                                  X509Certificate2 tlsCertificate, TChannelHandler discardHandler)
            where TChannelHandler : IChannelHandler
        {
            wrapper.NotNull(nameof(wrapper));

            return(wrapper.AddChannelHandler <IChannel>(tlsCertificate, pipeline =>
            {
                pipeline.AddLast(new LoggingHandler("CONN"));
                pipeline.AddLast(discardHandler);
            }));
        }
        public static IServerBootstrapWrapper AddHttpHandler <TChannelHandler>(this IServerBootstrapWrapper wrapper,
                                                                               X509Certificate2 tlsCertificate, TChannelHandler httpHandler)
            where TChannelHandler : IChannelHandler
        {
            wrapper.NotNull(nameof(wrapper));

            return(wrapper.AddChannelHandler <IChannel>(tlsCertificate, pipeline =>
            {
                pipeline.AddLast("encoder", new HttpResponseEncoder());
                pipeline.AddLast("decoder", new HttpRequestDecoder(4096, 8192, 8192, false));
                pipeline.AddLast(httpHandler);
            }));
        }
        public static IServerBootstrapWrapper AddWebSocketHandler <TChannelHandler>(this IServerBootstrapWrapper wrapper,
                                                                                    X509Certificate2 tlsCertificate, TChannelHandler webSocketHandler)
            where TChannelHandler : IChannelHandler
        {
            wrapper.NotNull(nameof(wrapper));

            return(wrapper.AddChannelHandler <IChannel>(tlsCertificate, pipeline =>
            {
                pipeline.AddLast(new HttpServerCodec());
                pipeline.AddLast(new HttpObjectAggregator(65536));
                pipeline.AddLast(webSocketHandler);
            }));
        }
        public static IServerBootstrapWrapper AddTelnetHandler <TChannelHandler>(this IServerBootstrapWrapper wrapper,
                                                                                 X509Certificate2 tlsCertificate, TChannelHandler telnetHandler)
            where TChannelHandler : IChannelHandler
        {
            wrapper.NotNull(nameof(wrapper));

            return(wrapper.AddChannelHandler <IChannel>(tlsCertificate, pipeline =>
            {
                pipeline.AddLast(new DelimiterBasedFrameDecoder(8192, Delimiters.LineDelimiter()));
                pipeline.AddLast(new StringEncoder());
                pipeline.AddLast(new StringDecoder());
                pipeline.AddLast(telnetHandler);
            }));
        }
        public static IServerBootstrapWrapper AddFactorialHandler <TChannelHandler>(this IServerBootstrapWrapper wrapper,
                                                                                    X509Certificate2 tlsCertificate, TChannelHandler factorialHandler)
            where TChannelHandler : IChannelHandler
        {
            wrapper.NotNull(nameof(wrapper));

            return(wrapper.AddChannelHandler <IChannel>(tlsCertificate, pipeline =>
            {
                pipeline.AddLast(new LoggingHandler("CONN"));
                pipeline.AddLast(new BigIntegerEncoder());
                pipeline.AddLast(new BigIntegerDecoder());
                pipeline.AddLast(factorialHandler);
            }));
        }
        public static IServerBootstrapWrapper AddEchoHandler <TChannelHandler>(this IServerBootstrapWrapper wrapper,
                                                                               X509Certificate2 tlsCertificate, TChannelHandler echoHandler)
            where TChannelHandler : IChannelHandler
        {
            wrapper.NotNull(nameof(wrapper));

            return(wrapper.AddChannelHandler <IChannel>(tlsCertificate, pipeline =>
            {
                pipeline.AddLast(new LoggingHandler("SRV-CONN"));
                pipeline.AddLast("framing-enc", new LengthFieldPrepender(2));
                pipeline.AddLast("framing-dec", new LengthFieldBasedFrameDecoder(ushort.MaxValue, 0, 2, 0, 2));
                pipeline.AddLast("echo", echoHandler);
            },
                                                        addTlsPipelineName: true));
        }