Skip to content

Instantly share code, notes, and snippets.

@Horusiath
Created January 16, 2017 13:26
Show Gist options
  • Save Horusiath/e3d5d7be606d9b290668b1b584a1994a to your computer and use it in GitHub Desktop.
Save Horusiath/e3d5d7be606d9b290668b1b584a1994a to your computer and use it in GitHub Desktop.
Akka.NET new DotNetty-based transport pipelines (more or less accurate)
// server
new ServerBootstrap()
.Group(serverEventLoopGroup)
.Option(ChannelOption.SoReuseaddr, Settings.TcpReuseAddr)
.Option(ChannelOption.SoKeepalive, Settings.TcpKeepAlive)
.Option(ChannelOption.TcpNodelay, Settings.TcpNoDelay)
.Option(ChannelOption.AutoRead, false)
.Option(ChannelOption.SoBacklog, Settings.Backlog)
.ChannelFactory(() => Settings.EnforceIpFamily
? new TcpServerSocketChannel(addressFamily)
: new TcpServerSocketChannel())
.ChildHandler(new ActionChannelInitializer<TcpSocketChannel>(channel => {
var pipeline = channel.Pipeline;
pipeline.AddFirst("tls", TlsHandler.Server(Settings.Ssl.Certificate));
pipeline.AddLast("FrameDecoder", new LengthFieldBasedFrameDecoder((int)MaximumPayloadBytes, 0, 4, 0, 4));
pipeline.AddLast("FrameEncoder", new LengthFieldPrepender(4, false));
var handler = new TcpServerHandler(this, Logging.GetLogger(System, typeof(TcpServerHandler)), AssociationListenerPromise.Task);
pipeline.AddLast("serverHandler", handler);
}));
// client
new Bootstrap()
.Group(clientEventLoopGroup)
.Option(ChannelOption.SoReuseaddr, Settings.TcpReuseAddr)
.Option(ChannelOption.SoKeepalive, Settings.TcpKeepAlive)
.Option(ChannelOption.TcpNodelay, Settings.TcpNoDelay)
.Option(ChannelOption.ConnectTimeout, Settings.ConnectTimeout)
.Option(ChannelOption.AutoRead, false)
.ChannelFactory(() => Settings.EnforceIpFamily
? new TcpSocketChannel(addressFamily)
: new TcpSocketChannel())
.Handler(new ActionChannelInitializer<TcpSocketChannel>(channel =>{
var pipeline = channel.Pipeline;
var certificate = Settings.Ssl.Certificate;
var host = certificate.GetNameInfo(X509NameType.DnsName, false);
pipeline.AddFirst("tls", TlsHandler.Client(host, certificate));
pipeline.AddLast("FrameDecoder", new LengthFieldBasedFrameDecoder((int)MaximumPayloadBytes, 0, 4, 0, 4));
pipeline.AddLast("FrameEncoder", new LengthFieldPrepender(4, false));
var handler = new TcpClientHandler(this, Logging.GetLogger(System, typeof(TcpClientHandler)), remoteAddress);
pipeline.AddLast("clientHandler", handler);
}));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment