stop method

Future<void> stop()

Stops the IPFS node gracefully, releasing all resources.

Implementation

Future<void> stop() async {
  _logger.debug('Stopping IPFS Node...');

  try {
    // Stop in reverse order of initialization

    // Stop high-level services
    if (_container.isRegistered(IPNSHandler)) {
      await _container.get<IPNSHandler>().stop();
    }
    if (_container.isRegistered(AutoNATHandler)) {
      await _container.get<AutoNATHandler>().stop();
    }
    if (_container.isRegistered(GraphsyncHandler)) {
      await _container.get<GraphsyncHandler>().stop();
    }
    if (_container.isRegistered(DNSLinkHandler)) {
      await _container.get<DNSLinkHandler>().stop();
    }
    if (_container.isRegistered(ContentRoutingHandler)) {
      await _container.get<ContentRoutingHandler>().stop();
    }

    // Stop network layer
    if (_container.isRegistered(BitswapHandler)) {
      await _container.get<BitswapHandler>().stop();
    }
    if (_container.isRegistered(PubSubHandler)) {
      await _container.get<PubSubHandler>().stop();
    }
    if (_container.isRegistered(DHTHandler)) {
      await _container.get<DHTHandler>().stop();
    }
    if (_container.isRegistered(BootstrapHandler)) {
      await _container.get<BootstrapHandler>().stop();
    }
    if (_container.isRegistered(MDNSHandler)) {
      await _container.get<MDNSHandler>().stop();
    }
    if (_container.isRegistered(NetworkHandler)) {
      await _container.get<NetworkHandler>().stop();
    }

    // Stop storage layer
    await _container.get<IPLDHandler>().stop();
    await _container.get<DatastoreHandler>().stop();

    // Stop core systems
    await _container.get<MetricsCollector>().stop();
    await _container.get<SecurityManager>().stop();

    _logger.info('IPFS Node stopped successfully');
  } catch (e, stackTrace) {
    _logger.error('Failed to stop IPFS Node', e, stackTrace);
    rethrow;
  }
}