private async Task Setup()
        {
            _peerChallengeRequest = ContainerProvider.Container.Resolve <IPeerChallengeRequest>();

            var eventLoopGroupFactoryConfiguration = new EventLoopGroupFactoryConfiguration
            {
                TcpClientHandlerWorkerThreads = 2,
                TcpServerHandlerWorkerThreads = 3,
                UdpServerHandlerWorkerThreads = 4,
                UdpClientHandlerWorkerThreads = 5
            };

            var keySigner = ContainerProvider.Container.Resolve <IKeySigner>(); // @@

            _peerService = new PeerService(
                new UdpServerEventLoopGroupFactory(eventLoopGroupFactoryConfiguration),
                new PeerServerChannelFactory(ContainerProvider.Container.Resolve <IPeerMessageCorrelationManager>(),
                                             ContainerProvider.Container.Resolve <IBroadcastManager>(),
                                             keySigner,
                                             ContainerProvider.Container.Resolve <IPeerIdValidator>(),
                                             ContainerProvider.Container.Resolve <IPeerSettings>()),
                new DiscoveryHelper.DevDiscover(),
                ContainerProvider.Container.Resolve <IEnumerable <IP2PMessageObserver> >(),
                _peerSettings,
                ContainerProvider.Container.Resolve <ILogger>(),
                ContainerProvider.Container.Resolve <IHealthChecker>());

            await _peerService.StartAsync();
        }
예제 #2
0
 public PingResponseObserver(IPeerChallengeRequest peerChallengeRequest, IPeerRepository peerRepository, ILogger logger)
     : base(logger)
 {
     _peerChallengeRequest  = peerChallengeRequest;
     _peerRepository        = peerRepository;
     ResponseMessageSubject = new ReplaySubject <IPeerClientMessageDto>(1);
 }
        public void Init()
        {
            Setup(TestContext.CurrentContext);

            var logger = Substitute.For <ILogger>();

            var keyRegistry = TestKeyRegistry.MockKeyRegistry();

            ContainerProvider.ContainerBuilder.RegisterInstance(keyRegistry).As <IKeyRegistry>();

            ContainerProvider.ContainerBuilder.RegisterModule(new KeystoreModule());
            ContainerProvider.ContainerBuilder.RegisterModule(new KeySignerModule());
            ContainerProvider.ContainerBuilder.RegisterModule(new HashingModule());
            ContainerProvider.ContainerBuilder.RegisterModule(new BulletProofsModule());

            _peerSettings = new PeerSettings(ContainerProvider.ConfigurationRoot);

            var peerSettings =
                PeerIdHelper.GetPeerId("sender", _peerSettings.BindAddress, _peerSettings.Port)
                .ToSubstitutedPeerSettings();

            ContainerProvider.ContainerBuilder.Register(c =>
            {
                var peerClient = c.Resolve <IPeerClient>();
                peerClient.StartAsync().ConfigureAwait(false).GetAwaiter().GetResult();
                return(new PeerChallengeRequest(logger, peerClient, peerSettings, 10));
            }).As <IPeerChallengeRequest>().SingleInstance();

            _peerChallengeRequest = ContainerProvider.Container.Resolve <IPeerChallengeRequest>();

            var eventLoopGroupFactoryConfiguration = new EventLoopGroupFactoryConfiguration
            {
                TcpClientHandlerWorkerThreads = 2,
                TcpServerHandlerWorkerThreads = 3,
                UdpServerHandlerWorkerThreads = 4,
                UdpClientHandlerWorkerThreads = 5
            };

            var keySigner = ContainerProvider.Container.Resolve <IKeySigner>(); // @@

            _peerService = new PeerService(
                new UdpServerEventLoopGroupFactory(eventLoopGroupFactoryConfiguration),
                new PeerServerChannelFactory(ContainerProvider.Container.Resolve <IPeerMessageCorrelationManager>(),
                                             ContainerProvider.Container.Resolve <IBroadcastManager>(),
                                             keySigner,
                                             ContainerProvider.Container.Resolve <IPeerIdValidator>(),
                                             ContainerProvider.Container.Resolve <IPeerSettings>()),
                new DiscoveryHelper.DevDiscover(),
                ContainerProvider.Container.Resolve <IEnumerable <IP2PMessageObserver> >(),
                _peerSettings,
                ContainerProvider.Container.Resolve <ILogger>(),
                ContainerProvider.Container.Resolve <IHealthChecker>());

            _peerService.StartAsync().Wait();
        }
예제 #4
0
 public PeerHeartbeatChecker(ILogger logger,
                             IPeerRepository peerRepository,
                             IPeerChallengeRequest peerChallengeRequest,
                             int checkHeartbeatIntervalSeconds,
                             int maxNonResponsiveCounter)
 {
     _logger = logger;
     _nonResponsivePeerMap    = new ConcurrentDictionary <string, int>();
     _peerRepository          = peerRepository;
     _maxNonResponsiveCounter = maxNonResponsiveCounter;
     _peerChallengeRequest    = peerChallengeRequest;
     _checkHeartbeatInterval  = TimeSpan.FromSeconds(checkHeartbeatIntervalSeconds);
 }
예제 #5
0
        public void Init()
        {
            var subbedPeerClient = Substitute.For <IPeerClient>();

            _testSettings         = PeerSettingsHelper.TestPeerSettings();
            _cancellationProvider = new CancellationTokenProvider(TimeSpan.FromSeconds(10));

            _peerChallengeRequest = new PeerChallengeRequest(
                Substitute.For <ILogger>(),
                subbedPeerClient,
                _testSettings,
                10
                );
        }
예제 #6
0
 public PingResponseObserver(ILogger logger, IPeerChallengeRequest peerChallengeRequest)
     : base(logger)
 {
     _peerChallengeRequest  = peerChallengeRequest;
     ResponseMessageSubject = new ReplaySubject <IPeerClientMessageDto>(1);
 }