@@ -7,7 +7,7 @@ use crate::lsps0::ser::{
7
7
LSPS_MESSAGE_TYPE_ID ,
8
8
} ;
9
9
use crate :: lsps0:: service:: LSPS0ServiceHandler ;
10
- use crate :: message_queue:: MessageQueue ;
10
+ use crate :: message_queue:: { MessageQueue , ProcessMessagesCallback } ;
11
11
12
12
use crate :: lsps1:: client:: { LSPS1ClientConfig , LSPS1ClientHandler } ;
13
13
use crate :: lsps1:: msgs:: LSPS1Message ;
@@ -17,7 +17,7 @@ use crate::lsps1::service::{LSPS1ServiceConfig, LSPS1ServiceHandler};
17
17
use crate :: lsps2:: client:: { LSPS2ClientConfig , LSPS2ClientHandler } ;
18
18
use crate :: lsps2:: msgs:: LSPS2Message ;
19
19
use crate :: lsps2:: service:: { LSPS2ServiceConfig , LSPS2ServiceHandler } ;
20
- use crate :: prelude:: { new_hash_map, new_hash_set, HashMap , HashSet , ToString , Vec } ;
20
+ use crate :: prelude:: { new_hash_map, new_hash_set, Box , HashMap , HashSet , ToString , Vec } ;
21
21
use crate :: sync:: { Arc , Mutex , RwLock } ;
22
22
23
23
use lightning:: chain:: { self , BestBlock , Confirm , Filter , Listen } ;
@@ -310,74 +310,27 @@ where {
310
310
/// let process_msgs_pm = Arc::clone(&my_peer_manager);
311
311
/// let process_msgs_callback = move || process_msgs_pm.process_events();
312
312
///
313
- /// my_liquidity_manager.set_process_msgs_callback(process_msgs_callback);
313
+ /// my_liquidity_manager.set_process_msgs_callback(Box::new( process_msgs_callback) );
314
314
/// # }
315
315
/// ```
316
316
///
317
317
/// [`PeerManager::process_events`]: lightning::ln::peer_handler::PeerManager::process_events
318
- #[ cfg( feature = "std" ) ]
319
- pub fn set_process_msgs_callback ( & self , callback : impl Fn ( ) + Send + Sync + ' static ) {
320
- self . pending_messages . set_process_msgs_callback ( callback)
318
+ pub fn set_process_msgs_callback ( & self , callback : Box < dyn ProcessMessagesCallback > ) {
319
+ self . pending_messages . set_process_msgs_callback ( callback) ;
321
320
}
322
321
323
322
/// Allows to set a callback that will be called after new messages are pushed to the message
324
323
/// queue.
325
324
///
326
- /// Usually, you'll want to use this to call [`PeerManager::process_events`] to clear the
327
- /// message queue. For example:
325
+ /// C bindings don't (currently) know how to map `Box<dyn Trait>`, and while it could add the
326
+ /// following wrapper, doing it in the bindings is currently much more work than simply doing it
327
+ /// here.
328
328
///
329
- /// ```
330
- /// # use lightning::io;
331
- /// # use lightning_liquidity::LiquidityManager;
332
- /// # use std::sync::{Arc, RwLock};
333
- /// # use std::sync::atomic::{AtomicBool, Ordering};
334
- /// # use std::time::SystemTime;
335
- /// # struct MyStore {}
336
- /// # impl lightning::util::persist::KVStore for MyStore {
337
- /// # fn read(&self, primary_namespace: &str, secondary_namespace: &str, key: &str) -> io::Result<Vec<u8>> { Ok(Vec::new()) }
338
- /// # fn write(&self, primary_namespace: &str, secondary_namespace: &str, key: &str, buf: &[u8]) -> io::Result<()> { Ok(()) }
339
- /// # fn remove(&self, primary_namespace: &str, secondary_namespace: &str, key: &str, lazy: bool) -> io::Result<()> { Ok(()) }
340
- /// # fn list(&self, primary_namespace: &str, secondary_namespace: &str) -> io::Result<Vec<String>> { Ok(Vec::new()) }
341
- /// # }
342
- /// # struct MyEntropySource {}
343
- /// # impl lightning::sign::EntropySource for MyEntropySource {
344
- /// # fn get_secure_random_bytes(&self) -> [u8; 32] { [0u8; 32] }
345
- /// # }
346
- /// # struct MyEventHandler {}
347
- /// # impl MyEventHandler {
348
- /// # async fn handle_event(&self, _: lightning::events::Event) {}
349
- /// # }
350
- /// # #[derive(Eq, PartialEq, Clone, Hash)]
351
- /// # struct MySocketDescriptor {}
352
- /// # impl lightning::ln::peer_handler::SocketDescriptor for MySocketDescriptor {
353
- /// # fn send_data(&mut self, _data: &[u8], _resume_read: bool) -> usize { 0 }
354
- /// # fn disconnect_socket(&mut self) {}
355
- /// # }
356
- /// # type MyBroadcaster = dyn lightning::chain::chaininterface::BroadcasterInterface;
357
- /// # type MyFeeEstimator = dyn lightning::chain::chaininterface::FeeEstimator;
358
- /// # type MyNodeSigner = dyn lightning::sign::NodeSigner;
359
- /// # type MyUtxoLookup = dyn lightning::routing::utxo::UtxoLookup;
360
- /// # type MyFilter = dyn lightning::chain::Filter;
361
- /// # type MyLogger = dyn lightning::util::logger::Logger;
362
- /// # type MyChainMonitor = lightning::chain::chainmonitor::ChainMonitor<lightning::sign::InMemorySigner, Arc<MyFilter>, Arc<MyBroadcaster>, Arc<MyFeeEstimator>, Arc<MyLogger>, Arc<MyStore>>;
363
- /// # type MyPeerManager = lightning::ln::peer_handler::SimpleArcPeerManager<MySocketDescriptor, MyChainMonitor, MyBroadcaster, MyFeeEstimator, Arc<MyUtxoLookup>, MyLogger>;
364
- /// # type MyNetworkGraph = lightning::routing::gossip::NetworkGraph<Arc<MyLogger>>;
365
- /// # type MyGossipSync = lightning::routing::gossip::P2PGossipSync<Arc<MyNetworkGraph>, Arc<MyUtxoLookup>, Arc<MyLogger>>;
366
- /// # type MyChannelManager = lightning::ln::channelmanager::SimpleArcChannelManager<MyChainMonitor, MyBroadcaster, MyFeeEstimator, MyLogger>;
367
- /// # type MyScorer = RwLock<lightning::routing::scoring::ProbabilisticScorer<Arc<MyNetworkGraph>, Arc<MyLogger>>>;
368
- /// # type MyLiquidityManager = LiquidityManager<Arc<MyEntropySource>, Arc<MyChannelManager>, Arc<MyFilter>>;
369
- /// # 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>) {
370
- /// let process_msgs_pm = Arc::clone(&my_peer_manager);
371
- /// let process_msgs_callback = move || process_msgs_pm.process_events();
372
- ///
373
- /// my_liquidity_manager.set_process_msgs_callback(process_msgs_callback);
374
- /// # }
375
- /// ```
376
- ///
377
- /// [`PeerManager::process_events`]: lightning::ln::peer_handler::PeerManager::process_events
378
- #[ cfg( not( feature = "std" ) ) ]
379
- pub fn set_process_msgs_callback ( & self , callback : impl Fn ( ) + ' static ) {
380
- self . pending_messages . set_process_msgs_callback ( callback)
329
+ /// Hence we simply allow setting a callback function that will be set via
330
+ /// [`Self::set_process_msgs_callback`] internally.
331
+ #[ cfg( c_bindings) ]
332
+ pub fn set_process_msgs_callback_fn < F : ' static + ProcessMessagesCallback > ( & self , callback : F ) {
333
+ self . set_process_msgs_callback ( Box :: new ( callback) ) ;
381
334
}
382
335
383
336
/// Blocks the current thread until next event is ready and returns it.
0 commit comments