public void Create_WithNullReceiverCache_ThrowsArgumentNullException() { // Act TestDelegate construct = () => NetMQTransport.Create(factory, requestRouter, null, topicRouter, publisherCache); // Assert Assert.That(construct, Throws.ArgumentNullException); }
public void SubscriberFactory_ReturnsRactory() { // Arrange var config = NetMQTransport.Create(factory, requestRouter, receiverCache, topicRouter, publisherCache); // Act var subscriberFactory = config.SubscriberFactory; // Assert Assert.That(subscriberFactory, Is.SameAs(factory)); }
private static async Task StartTransportAsync( NetMQTransport transport, CancellationToken cancellationToken) { await transport.StartAsync(cancellationToken); Task task = transport.RunAsync(cancellationToken); await transport.WaitForRunningAsync(); await task; }
public void SimpleBuilder() { // Act var builder = Builder.WithName("name"); builder.WithSerializer(new DotNetSerializer(), true); var transportFactory = NetMQTransport.FromBuilder( builder, NetMQFactory.FromBuilder( builder, new NetMQMonitor(new NetMQPoller()), NetMQMessageFactory.FromBuilder(builder))); var router = builder.Build(); // Assert Assert.That(router, Is.Not.Null); }
#pragma warning disable MEN003 // Method Main must be no longer than 120 lines public static async Task Main(string[] args) { Options options = Options.Parse(args, Console.Error); var loggerConfig = new LoggerConfiguration(); switch (options.LogLevel) { case "error": loggerConfig = loggerConfig.MinimumLevel.Error(); break; case "warning": loggerConfig = loggerConfig.MinimumLevel.Warning(); break; case "information": loggerConfig = loggerConfig.MinimumLevel.Information(); break; case "debug": loggerConfig = loggerConfig.MinimumLevel.Debug(); break; case "verbose": loggerConfig = loggerConfig.MinimumLevel.Verbose(); break; default: loggerConfig = loggerConfig.MinimumLevel.Information(); break; } loggerConfig = loggerConfig .MinimumLevel.Override("Microsoft", LogEventLevel.Information) .Enrich.FromLogContext() .WriteTo.Console(); Log.Logger = loggerConfig.CreateLogger(); if (options.IceServer is null && options.Host is null) { Log.Error( "-h/--host is required if -I/--ice-server is not given." ); Environment.Exit(1); return; } if (!(options.IceServer is null || options.Host is null)) { Log.Warning("-I/--ice-server will not work because -h/--host is given."); } try { var privateKey = options.PrivateKey ?? new PrivateKey(); RoutingTable table = new RoutingTable(privateKey.ToAddress()); ITransport transport; switch (options.TransportType) { case "tcp": transport = new TcpTransport( privateKey, AppProtocolVersion.FromToken(options.AppProtocolVersionToken), null, host: options.Host, listenPort: options.Port, iceServers: new[] { options.IceServer }, differentAppProtocolVersionEncountered: null); break; case "netmq": transport = new NetMQTransport( privateKey, AppProtocolVersion.FromToken(options.AppProtocolVersionToken), null, workers: options.Workers, host: options.Host, listenPort: options.Port, iceServers: new[] { options.IceServer }, differentAppProtocolVersionEncountered: null); break; default: Log.Error( "-t/--transport-type must be either \"tcp\" or \"netmq\"."); Environment.Exit(1); return; } KademliaProtocol peerDiscovery = new KademliaProtocol( table, transport, privateKey.ToAddress()); Startup.TableSingleton = table; IWebHost webHost = WebHost.CreateDefaultBuilder() .UseStartup <SeedStartup <Startup> >() .UseSerilog() .UseUrls($"http://{options.GraphQLHost}:{options.GraphQLPort}/") .Build(); using (var cts = new CancellationTokenSource()) { Console.CancelKeyPress += (sender, eventArgs) => { eventArgs.Cancel = true; cts.Cancel(); }; try { var tasks = new List <Task> { webHost.RunAsync(cts.Token), StartTransportAsync(transport, cts.Token), RefreshTableAsync(peerDiscovery, cts.Token), RebuildConnectionAsync(peerDiscovery, cts.Token), }; if (!(options.Peers is null) && options.Peers.Any()) { tasks.Add(CheckStaticPeersAsync( options.Peers, table, peerDiscovery, cts.Token)); } await Task.WhenAll(tasks); } catch (OperationCanceledException) { await transport.StopAsync(TimeSpan.FromSeconds(1)); } } } catch (InvalidOptionValueException e) { string expectedValues = string.Join(", ", e.ExpectedValues); Console.Error.WriteLine($"Unexpected value given through '{e.OptionName}'\n" + $" given value: {e.OptionValue}\n" + $" expected values: {expectedValues}"); } }
public static async Task Main(string[] args) { Options options = Options.Parse(args, Console.Error); var loggerConfig = new LoggerConfiguration(); loggerConfig = options.Debug ? loggerConfig.MinimumLevel.Debug() : loggerConfig.MinimumLevel.Information(); loggerConfig = loggerConfig .MinimumLevel.Override("Microsoft", LogEventLevel.Information) .Enrich.FromLogContext() .WriteTo.Console(); Log.Logger = loggerConfig.CreateLogger(); try { var privateKey = options.PrivateKey ?? new PrivateKey(); RoutingTable table = new RoutingTable(privateKey.ToAddress()); NetMQTransport transport = new NetMQTransport( table, privateKey, AppProtocolVersion.FromToken(options.AppProtocolVersionToken), null, options.Workers, options.Host, options.Port, new[] { options.IceServer }, null); KademliaProtocol peerDiscovery = new KademliaProtocol( table, transport, privateKey.ToAddress()); Startup.TableSingleton = table; IWebHost webHost = WebHost.CreateDefaultBuilder() .UseStartup <SeedStartup <Startup> >() .UseSerilog() .UseUrls($"http://{options.GraphQLHost}:{options.GraphQLPort}/") .Build(); using (var cts = new CancellationTokenSource()) { Console.CancelKeyPress += (sender, eventArgs) => { eventArgs.Cancel = true; cts.Cancel(); }; try { var tasks = new List <Task> { webHost.RunAsync(cts.Token), StartTransportAsync(transport, cts.Token), RefreshTableAsync(peerDiscovery, cts.Token), RebuildConnectionAsync(peerDiscovery, cts.Token), }; if (!(options.Peers is null) && options.Peers.Any()) { tasks.Add(CheckStaticPeersAsync( options.Peers, table, peerDiscovery, cts.Token)); } await Task.WhenAll(tasks); } catch (OperationCanceledException) { await transport.StopAsync(TimeSpan.FromSeconds(1)); } } } catch (InvalidOptionValueException e) { string expectedValues = string.Join(", ", e.ExpectedValues); Console.Error.WriteLine($"Unexpected value given through '{e.OptionName}'\n" + $" given value: {e.OptionValue}\n" + $" expected values: {expectedValues}"); } }