コード例 #1
0
        public void Create_WithNullReceiverCache_ThrowsArgumentNullException()
        {
            // Act
            TestDelegate construct = () => NetMQTransport.Create(factory, requestRouter, null, topicRouter, publisherCache);

            // Assert
            Assert.That(construct, Throws.ArgumentNullException);
        }
コード例 #2
0
        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));
        }
コード例 #3
0
        private static async Task StartTransportAsync(
            NetMQTransport transport,
            CancellationToken cancellationToken)
        {
            await transport.StartAsync(cancellationToken);

            Task task = transport.RunAsync(cancellationToken);
            await transport.WaitForRunningAsync();

            await task;
        }
コード例 #4
0
ファイル: FluentConstruction.cs プロジェクト: ewin66/Pigeon
        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);
        }
コード例 #5
0
ファイル: Program.cs プロジェクト: planetarium/libplanet-seed
#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}");
            }
        }
コード例 #6
0
        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}");
            }
        }