@@ -482,7 +482,42 @@ use core::task;
482
482
///
483
483
/// For example, in order to process background events in a [Tokio](https://tokio.rs/) task, you
484
484
/// could setup `process_events_async` like this:
485
- /// ```ignore
485
+ /// ```
486
+ /// # struct MyPersister {}
487
+ /// # impl lightning::util::persist::KVStorePersister for MyPersister {
488
+ /// # fn persist<W: lightning::util::ser::Writeable>(&self, key: &str, object: &W) -> lightning::io::Result<()> {
489
+ /// # Ok(())
490
+ /// # }
491
+ /// #
492
+ /// # }
493
+ /// # struct MyEventHandler {}
494
+ /// # impl MyEventHandler {
495
+ /// # async fn handle_event(&self, _: lightning::events::Event) {}
496
+ /// # }
497
+ /// # #[derive(Eq, PartialEq, Clone, Hash)]
498
+ /// # struct MySocketDescriptor {}
499
+ /// # impl lightning::ln::peer_handler::SocketDescriptor for MySocketDescriptor {
500
+ /// # fn send_data(&mut self, _data: &[u8], _resume_read: bool) -> usize { 0 }
501
+ /// # fn disconnect_socket(&mut self) {}
502
+ /// # }
503
+ /// # use std::sync::{Arc, Mutex};
504
+ /// # use std::sync::atomic::{AtomicBool, Ordering};
505
+ /// # use lightning_background_processor::{process_events_async, GossipSync};
506
+ /// # type MyBroadcaster = dyn lightning::chain::chaininterface::BroadcasterInterface + Send + Sync;
507
+ /// # type MyFeeEstimator = dyn lightning::chain::chaininterface::FeeEstimator + Send + Sync;
508
+ /// # type MyNodeSigner = dyn lightning::chain::keysinterface::NodeSigner + Send + Sync;
509
+ /// # type MyUtxoLookup = dyn lightning::routing::utxo::UtxoLookup + Send + Sync;
510
+ /// # type MyFilter = dyn lightning::chain::Filter + Send + Sync;
511
+ /// # type MyLogger = dyn lightning::util::logger::Logger + Send + Sync;
512
+ /// # type MyChainMonitor = lightning::chain::chainmonitor::ChainMonitor<lightning::chain::keysinterface::InMemorySigner, Arc<MyFilter>, Arc<MyBroadcaster>, Arc<MyFeeEstimator>, Arc<MyLogger>, Arc<MyPersister>>;
513
+ /// # type MyPeerManager = lightning::ln::peer_handler::SimpleArcPeerManager<MySocketDescriptor, MyChainMonitor, MyBroadcaster, MyFeeEstimator, MyUtxoLookup, MyLogger>;
514
+ /// # type MyNetworkGraph = lightning::routing::gossip::NetworkGraph<Arc<MyLogger>>;
515
+ /// # type MyGossipSync = lightning::routing::gossip::P2PGossipSync<Arc<MyNetworkGraph>, Arc<MyUtxoLookup>, Arc<MyLogger>>;
516
+ /// # type MyChannelManager = lightning::ln::channelmanager::SimpleArcChannelManager<MyChainMonitor, MyBroadcaster, MyFeeEstimator, MyLogger>;
517
+ /// # type MyScorer = Mutex<lightning::routing::scoring::ProbabilisticScorer<Arc<MyNetworkGraph>, Arc<MyLogger>>>;
518
+ ///
519
+ /// # fn setup_background_processing(my_persister: Arc<MyPersister>, my_event_handler: Arc<MyEventHandler>, my_chain_monitor: Arc<MyChainMonitor>, my_channel_manager: Arc<MyChannelManager>, my_gossip_sync: Arc<MyGossipSync>, my_logger: Arc<MyLogger>, my_scorer: Arc<MyScorer>, my_peer_manager: Arc<MyPeerManager>) {
520
+ /// let stop_background_processing = Arc::new(AtomicBool::new(false));
486
521
/// let background_persister = Arc::clone(&my_persister);
487
522
/// let background_event_handler = Arc::clone(&my_event_handler);
488
523
/// let background_chain_mon = Arc::clone(&my_chain_monitor);
@@ -495,9 +530,16 @@ use core::task;
495
530
/// // Setup the sleeper.
496
531
/// let should_stop = AtomicBool::new(false);
497
532
///
498
- /// let sleeper = |d| async move {
499
- /// tokio::time::sleep(d).await;
500
- /// should_stop.load(Ordering::Relaxed)
533
+ /// let sleeper = move |d| {
534
+ /// let stop = Arc::clone(&stop_background_processing);
535
+ /// Box::pin(async move {
536
+ /// if stop.load(Ordering::Acquire) {
537
+ /// true
538
+ /// } else {
539
+ /// tokio::time::sleep(d).await;
540
+ /// false
541
+ /// }
542
+ /// })
501
543
/// };
502
544
///
503
545
/// let mobile_interruptable_platform = false;
@@ -521,6 +563,7 @@ use core::task;
521
563
///
522
564
/// // Stop the background processing.
523
565
/// should_stop.store(true, Ordering::Relaxed);
566
+ /// # }
524
567
///```
525
568
#[ cfg( feature = "futures" ) ]
526
569
pub async fn process_events_async <
0 commit comments