@@ -34,7 +34,7 @@ mod logger;
34
34
use access:: LdkLiteChainAccess ;
35
35
pub use error:: LdkLiteError as Error ;
36
36
pub use event:: LdkLiteEvent ;
37
- use event:: LdkLiteEventHandler ;
37
+ use event:: { LdkLiteEventHandler , LdkLiteEventQueue } ;
38
38
39
39
#[ allow( unused_imports) ]
40
40
use logger:: {
@@ -81,16 +81,12 @@ use std::collections::HashMap;
81
81
use std:: fs;
82
82
use std:: net:: SocketAddr ;
83
83
use std:: sync:: atomic:: { AtomicBool , Ordering } ;
84
- use std:: sync:: mpsc;
85
84
use std:: sync:: { Arc , Mutex , RwLock } ;
86
85
use std:: thread;
87
86
use std:: time:: { Duration , SystemTime } ;
88
87
89
88
// TODO: Is MemoryDatabase okay to use?
90
89
91
- // The number of messages we buffer in the used channels.
92
- const CHANNEL_BUF_SIZE : usize = 1000 ;
93
-
94
90
// The used 'stop gap' parameter used by BDK's wallet sync. This seems to configure the threshold
95
91
// number of blocks after which BDK stops looking for scripts belonging to the wallet.
96
92
const BDK_CLIENT_STOP_GAP : usize = 20 ;
@@ -328,17 +324,23 @@ impl LdkLiteBuilder {
328
324
let inbound_payments = Arc :: new ( Mutex :: new ( HashMap :: new ( ) ) ) ;
329
325
let outbound_payments = Arc :: new ( Mutex :: new ( HashMap :: new ( ) ) ) ;
330
326
331
- // Step 14: Handle LDK Events
332
- let event_queue = mpsc:: sync_channel ( CHANNEL_BUF_SIZE ) ;
333
- let event_sender = event_queue. 0 . clone ( ) ;
327
+ // Step 14: Restore event handler from disk or create a new one.
328
+ let event_queue = if let Ok ( mut f) =
329
+ fs:: File :: open ( format ! ( "{}/{}" , ldk_data_dir. clone( ) , event:: EVENTS_PERSISTENCE_KEY ) )
330
+ {
331
+ Arc :: new ( LdkLiteEventQueue :: read ( & mut f, Arc :: clone ( & persister) ) ?)
332
+ } else {
333
+ Arc :: new ( LdkLiteEventQueue :: new ( Arc :: clone ( & persister) ) )
334
+ } ;
335
+
334
336
let event_handler = LdkLiteEventHandler :: new (
335
337
Arc :: clone ( & chain_access) ,
338
+ Arc :: clone ( & event_queue) ,
336
339
Arc :: clone ( & channel_manager) ,
337
340
Arc :: clone ( & network_graph) ,
338
341
Arc :: clone ( & keys_manager) ,
339
342
Arc :: clone ( & inbound_payments) ,
340
343
Arc :: clone ( & outbound_payments) ,
341
- event_sender,
342
344
Arc :: clone ( & logger) ,
343
345
Arc :: clone ( & config) ,
344
346
) ;
@@ -365,6 +367,7 @@ impl LdkLiteBuilder {
365
367
running,
366
368
config,
367
369
chain_access,
370
+ event_queue,
368
371
channel_manager,
369
372
chain_monitor,
370
373
peer_manager,
@@ -377,7 +380,6 @@ impl LdkLiteBuilder {
377
380
invoice_payer,
378
381
inbound_payments,
379
382
outbound_payments,
380
- event_queue,
381
383
} )
382
384
}
383
385
}
@@ -398,6 +400,7 @@ pub struct LdkLite {
398
400
running : RwLock < Option < LdkLiteRuntime > > ,
399
401
config : Arc < LdkLiteConfig > ,
400
402
chain_access : Arc < LdkLiteChainAccess < MemoryDatabase > > ,
403
+ event_queue : Arc < LdkLiteEventQueue < FilesystemPersister > > ,
401
404
channel_manager : Arc < ChannelManager > ,
402
405
chain_monitor : Arc < ChainMonitor > ,
403
406
peer_manager : Arc < PeerManager > ,
@@ -410,7 +413,6 @@ pub struct LdkLite {
410
413
invoice_payer : Arc < InvoicePayer < LdkLiteEventHandler > > ,
411
414
inbound_payments : Arc < PaymentInfoStorage > ,
412
415
outbound_payments : Arc < PaymentInfoStorage > ,
413
- event_queue : ( EventSender , EventReceiver ) ,
414
416
}
415
417
416
418
impl LdkLite {
@@ -579,9 +581,16 @@ impl LdkLite {
579
581
} )
580
582
}
581
583
582
- /// Returns the next event from the event queue. Blocks until a new event is available.
583
- pub fn next_event ( & self ) -> Result < LdkLiteEvent , Error > {
584
- Ok ( self . event_queue . 1 . recv ( ) ?)
584
+ /// Blocks until the next event is available.
585
+ ///
586
+ /// Note: this will always return the same event until handling is confirmed via [`event_handled`].
587
+ pub fn next_event ( & self ) -> LdkLiteEvent {
588
+ self . event_queue . next_event ( )
589
+ }
590
+
591
+ /// Confirm the last retrieved event handled.
592
+ pub fn event_handled ( & self ) -> Result < ( ) , Error > {
593
+ self . event_queue . event_handled ( )
585
594
}
586
595
587
596
/// Returns our own node id
@@ -955,8 +964,5 @@ pub(crate) type NetworkGraph = gossip::NetworkGraph<Arc<FilesystemLogger>>;
955
964
956
965
pub ( crate ) type PaymentInfoStorage = Mutex < HashMap < PaymentHash , PaymentInfo > > ;
957
966
958
- pub ( crate ) type EventSender = mpsc:: SyncSender < LdkLiteEvent > ;
959
- pub ( crate ) type EventReceiver = mpsc:: Receiver < LdkLiteEvent > ;
960
-
961
967
#[ cfg( test) ]
962
968
mod tests { }
0 commit comments