stop method
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;
}
}