private async Task <AssociationHandle> StartClient(Address remoteAddress) { if (InternalTransport != TransportMode.Tcp) { throw new NotSupportedException("Currently Akka.Streams server supports only TCP transport mode."); } var addressFamily = Settings.DnsUseIpv6 ? AddressFamily.InterNetworkV6 : AddressFamily.InterNetwork; var socketAddress = RemotingAddressHelpers.AddressToSocketAddress(remoteAddress); socketAddress = await MapEndpointAsync(socketAddress).ConfigureAwait(false); // TODO: socket options var clientSource = System.TcpStream().OutgoingConnection(socketAddress, connectionTimeout: Settings.ConnectTimeout) .AddAttributes(ActorAttributes.CreateDispatcher(System.Settings.Config.GetString("akka.remote.use-dispatcher"))); var joined = clientSource.JoinMaterialized( StreamTransportFlows.OutboundConnectionHandler(this, remoteAddress, socketAddress), (connectTask, associate) => (connectTask, associate)) .Join(Flow.Create <Google.Protobuf.ByteString>().Where(_ => true)) .Run(StreamMaterializer); await joined.connectTask.ConfigureAwait(false); return(await joined.associate.ConfigureAwait(false)); }
private void StartServer() { if (InternalTransport != TransportMode.Tcp) { throw new NotSupportedException("Currently Akka.Streams server supports only TCP transport mode."); } var addressFamily = Settings.DnsUseIpv6 ? AddressFamily.InterNetworkV6 : AddressFamily.InterNetwork; var serverSource = System.TcpStream().Bind(Settings.Hostname, Settings.Port, Settings.Backlog) .AddAttributes(ActorAttributes.CreateDispatcher(System.Settings.Config.GetString("akka.remote.use-dispatcher"))); serverSource.RunForeach(connection => { connection.Flow.Join(StreamTransportFlows.OutboundConnectionHandler(Settings, connection.)); }); }