public async Task StopAsync(ExitType exitType) { if (_logger.IsInfo) _logger.Info("Shutting down..."); _runnerCancellation.Cancel(); if (_logger.IsInfo) _logger.Info("Stopping rlpx peer..."); var rlpxPeerTask = _rlpxPeer?.Shutdown() ?? Task.CompletedTask; if (_logger.IsInfo) _logger.Info("Stopping peer manager..."); var peerManagerTask = _peerManager?.StopAsync(exitType) ?? Task.CompletedTask; if (_logger.IsInfo) _logger.Info("Stopping sync manager..."); var syncManagerTask = _syncManager?.StopAsync() ?? Task.CompletedTask; if (_logger.IsInfo) _logger.Info("Stopping block producer..."); var blockProducerTask = _blockProducer?.StopAsync() ?? Task.CompletedTask; if (_logger.IsInfo) _logger.Info("Stopping blockchain processor..."); var blockchainProcessorTask = (_blockchainProcessor?.StopAsync() ?? Task.CompletedTask); if (_logger.IsInfo) _logger.Info("Stopping discovery app..."); var discoveryStopTask = _discoveryApp?.StopAsync() ?? Task.CompletedTask; await Task.WhenAll(discoveryStopTask, rlpxPeerTask, peerManagerTask, syncManagerTask, blockchainProcessorTask, blockProducerTask); if (_logger.IsInfo) _logger.Info("Closing DBs..."); _dbProvider.Dispose(); if (_logger.IsInfo) _logger.Info("Ethereum shutdown complete... please wait for all components to close"); }
public async Task StopAsync() { _logger.Info("Shutting down..."); _runnerCancellation.Cancel(); _logger.Debug("Stopping rlpx peer..."); var rlpxPeerTask = (_rlpxPeer?.Shutdown() ?? Task.CompletedTask); // await rlpxPeerTask; _logger.Debug("Stopping peer manager..."); var peerManagerTask = (_peerManager?.StopAsync() ?? Task.CompletedTask); //await peerManagerTask; _logger.Debug("Stopping sync manager..."); var syncManagerTask = (_syncManager?.StopAsync() ?? Task.CompletedTask); //await syncManagerTask; _logger.Debug("Stopping blockchain processor..."); var blockchainProcessorTask = (_blockchainProcessor?.StopAsync() ?? Task.CompletedTask); //await blockchainProcessorTask; _logger.Debug("Stopping discovery app..."); var discoveryStopTask = _discoveryApp?.StopAsync() ?? Task.CompletedTask; //await discoveryStopTask; await Task.WhenAll(discoveryStopTask, rlpxPeerTask, peerManagerTask, syncManagerTask, blockchainProcessorTask); _logger.Info("Goodbye..."); }
public async Task StopAsync() { _logger.Info("Shutting down..."); _runnerCancellation.Cancel(); _logger.Info("Stopping sync manager..."); await(_syncManager?.StopAsync() ?? Task.CompletedTask); _logger.Info("Stopping blockchain processor..."); await(_blockchainProcessor?.StopAsync() ?? Task.CompletedTask); _logger.Info("Stopping local peer..."); await(_localPeer?.Shutdown() ?? Task.CompletedTask); _logger.Info("Goodbye..."); }
private static async Task InitNet(ChainSpec chainSpec) { /* tools */ var serializationService = new MessageSerializationService(); var cryptoRandom = new CryptoRandom(); var signer = new Signer(); /* rlpx */ var eciesCipher = new EciesCipher(cryptoRandom); var eip8Pad = new Eip8MessagePad(cryptoRandom); serializationService.Register(new AuthEip8MessageSerializer(eip8Pad)); serializationService.Register(new AckEip8MessageSerializer(eip8Pad)); var encryptionHandshakeServiceA = new EncryptionHandshakeService(serializationService, eciesCipher, cryptoRandom, signer, _privateKey, NetworkLogger); /* p2p */ serializationService.Register(new HelloMessageSerializer()); serializationService.Register(new DisconnectMessageSerializer()); serializationService.Register(new PingMessageSerializer()); serializationService.Register(new PongMessageSerializer()); /* eth */ serializationService.Register(new StatusMessageSerializer()); serializationService.Register(new TransactionsMessageSerializer()); serializationService.Register(new GetBlockHeadersMessageSerializer()); serializationService.Register(new NewBlockHashesMessageSerializer()); serializationService.Register(new GetBlockBodiesMessageSerializer()); serializationService.Register(new BlockHeadersMessageSerializer()); serializationService.Register(new BlockBodiesMessageSerializer()); serializationService.Register(new NewBlockMessageSerializer()); NetworkLogger.Info("Initializing server..."); var localPeer = new RlpxPeer(_privateKey.PublicKey, _listenPort, encryptionHandshakeServiceA, serializationService, _syncManager, NetworkLogger); await localPeer.Init(); // https://stackoverflow.com/questions/6803073/get-local-ip-address?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa string localIp; using (Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, 0)) { socket.Connect("8.8.8.8", 65530); IPEndPoint endPoint = socket.LocalEndPoint as IPEndPoint; Debug.Assert(endPoint != null, "null endpoint when connecting a UDP socket"); localIp = endPoint.Address.ToString(); } NetworkLogger.Info($"Node is up and listening on {localIp}:{_listenPort}... press ENTER to exit"); NetworkLogger.Info($"enode://{_privateKey.PublicKey.ToString(false)}@{localIp}:{_listenPort}"); foreach (Bootnode bootnode in chainSpec.Bootnodes) { NetworkLogger.Info($"Connecting to {bootnode.Description} @ {bootnode.Host}:{bootnode.Port}"); await localPeer.ConnectAsync(bootnode.PublicKey, bootnode.Host, bootnode.Port); NetworkLogger.Info("Testnet connected..."); } Console.ReadLine(); NetworkLogger.Info("Shutting down..."); NetworkLogger.Info("Stopping sync manager..."); await _syncManager.StopAsync(); NetworkLogger.Info("Stopping blockchain processor..."); await _blockchainProcessor.StopAsync(); NetworkLogger.Info("Stopping local peer..."); await localPeer.Shutdown(); NetworkLogger.Info("Goodbye..."); }