@@ -286,10 +286,71 @@ where {
286
286
/// ```
287
287
///
288
288
/// [`PeerManager::process_events`]: lightning::ln::peer_handler::PeerManager::process_events
289
+ #[ cfg( feature = "std" ) ]
289
290
pub fn set_process_msgs_callback ( & self , callback : impl Fn ( ) + Send + Sync + ' static ) {
290
291
self . pending_messages . set_process_msgs_callback ( callback)
291
292
}
292
293
294
+ /// Allows to set a callback that will be called after new messages are pushed to the message
295
+ /// queue.
296
+ ///
297
+ /// Usually, you'll want to use this to call [`PeerManager::process_events`] to clear the
298
+ /// message queue. For example:
299
+ ///
300
+ /// ```
301
+ /// # use lightning::io;
302
+ /// # use lightning_liquidity::LiquidityManager;
303
+ /// # use std::sync::{Arc, RwLock};
304
+ /// # use std::sync::atomic::{AtomicBool, Ordering};
305
+ /// # use std::time::SystemTime;
306
+ /// # struct MyStore {}
307
+ /// # impl lightning::util::persist::KVStore for MyStore {
308
+ /// # fn read(&self, primary_namespace: &str, secondary_namespace: &str, key: &str) -> io::Result<Vec<u8>> { Ok(Vec::new()) }
309
+ /// # fn write(&self, primary_namespace: &str, secondary_namespace: &str, key: &str, buf: &[u8]) -> io::Result<()> { Ok(()) }
310
+ /// # fn remove(&self, primary_namespace: &str, secondary_namespace: &str, key: &str, lazy: bool) -> io::Result<()> { Ok(()) }
311
+ /// # fn list(&self, primary_namespace: &str, secondary_namespace: &str) -> io::Result<Vec<String>> { Ok(Vec::new()) }
312
+ /// # }
313
+ /// # struct MyEntropySource {}
314
+ /// # impl lightning::sign::EntropySource for MyEntropySource {
315
+ /// # fn get_secure_random_bytes(&self) -> [u8; 32] { [0u8; 32] }
316
+ /// # }
317
+ /// # struct MyEventHandler {}
318
+ /// # impl MyEventHandler {
319
+ /// # async fn handle_event(&self, _: lightning::events::Event) {}
320
+ /// # }
321
+ /// # #[derive(Eq, PartialEq, Clone, Hash)]
322
+ /// # struct MySocketDescriptor {}
323
+ /// # impl lightning::ln::peer_handler::SocketDescriptor for MySocketDescriptor {
324
+ /// # fn send_data(&mut self, _data: &[u8], _resume_read: bool) -> usize { 0 }
325
+ /// # fn disconnect_socket(&mut self) {}
326
+ /// # }
327
+ /// # type MyBroadcaster = dyn lightning::chain::chaininterface::BroadcasterInterface;
328
+ /// # type MyFeeEstimator = dyn lightning::chain::chaininterface::FeeEstimator;
329
+ /// # type MyNodeSigner = dyn lightning::sign::NodeSigner;
330
+ /// # type MyUtxoLookup = dyn lightning::routing::utxo::UtxoLookup;
331
+ /// # type MyFilter = dyn lightning::chain::Filter;
332
+ /// # type MyLogger = dyn lightning::util::logger::Logger;
333
+ /// # type MyChainMonitor = lightning::chain::chainmonitor::ChainMonitor<lightning::sign::InMemorySigner, Arc<MyFilter>, Arc<MyBroadcaster>, Arc<MyFeeEstimator>, Arc<MyLogger>, Arc<MyStore>>;
334
+ /// # type MyPeerManager = lightning::ln::peer_handler::SimpleArcPeerManager<MySocketDescriptor, MyChainMonitor, MyBroadcaster, MyFeeEstimator, Arc<MyUtxoLookup>, MyLogger>;
335
+ /// # type MyNetworkGraph = lightning::routing::gossip::NetworkGraph<Arc<MyLogger>>;
336
+ /// # type MyGossipSync = lightning::routing::gossip::P2PGossipSync<Arc<MyNetworkGraph>, Arc<MyUtxoLookup>, Arc<MyLogger>>;
337
+ /// # type MyChannelManager = lightning::ln::channelmanager::SimpleArcChannelManager<MyChainMonitor, MyBroadcaster, MyFeeEstimator, MyLogger>;
338
+ /// # type MyScorer = RwLock<lightning::routing::scoring::ProbabilisticScorer<Arc<MyNetworkGraph>, Arc<MyLogger>>>;
339
+ /// # type MyLiquidityManager = LiquidityManager<Arc<MyEntropySource>, Arc<MyChannelManager>, Arc<MyFilter>>;
340
+ /// # fn setup_background_processing(my_persister: Arc<MyStore>, my_event_handler: Arc<MyEventHandler>, my_chain_monitor: Arc<MyChainMonitor>, my_channel_manager: Arc<MyChannelManager>, my_logger: Arc<MyLogger>, my_peer_manager: Arc<MyPeerManager>, my_liquidity_manager: Arc<MyLiquidityManager>) {
341
+ /// let process_msgs_pm = Arc::clone(&my_peer_manager);
342
+ /// let process_msgs_callback = move || process_msgs_pm.process_events();
343
+ ///
344
+ /// my_liquidity_manager.set_process_msgs_callback(process_msgs_callback);
345
+ /// # }
346
+ /// ```
347
+ ///
348
+ /// [`PeerManager::process_events`]: lightning::ln::peer_handler::PeerManager::process_events
349
+ #[ cfg( feature = "no-std" ) ]
350
+ pub fn set_process_msgs_callback ( & self , callback : impl Fn ( ) + ' static ) {
351
+ self . pending_messages . set_process_msgs_callback ( callback)
352
+ }
353
+
293
354
/// Blocks the current thread until next event is ready and returns it.
294
355
///
295
356
/// Typically you would spawn a thread or task that calls this in a loop.
0 commit comments