+
+ // Step 15: Initialize LDK Event Handling
+ let peer_manager_event_listener = peer_manager.clone();
+ let channel_manager_event_listener = channel_manager.clone();
+ let chain_monitor_event_listener = chain_monitor.clone();
+ let keys_manager_listener = keys_manager.clone();
+ let payment_info: PaymentInfoStorage = Arc::new(Mutex::new(HashMap::new()));
+ let payment_info_for_events = payment_info.clone();
+ let handle = runtime_handle.clone();
+ thread::spawn(move || {
+ handle_ldk_events(peer_manager_event_listener, channel_manager_event_listener,
+ chain_monitor_event_listener, bitcoind_client.clone(),
+ keys_manager_listener, payment_info_for_events);
+ });
+
+ // Reconnect to channel peers if possible.
+ let peer_data_path = format!("{}/channel_peer_data", ldk_data_dir.clone());
+ match disk::read_channel_peer_data(Path::new(&peer_data_path)) {
+ Ok(mut info) => {
+ for (pubkey, peer_addr) in info.drain() {
+ let _ = cli::connect_peer_if_necessary(pubkey, peer_addr, peer_manager.clone(),
+ event_ntfn_sender.clone(), handle.clone());
+ }
+ },
+ Err(e) => println!("ERROR: errored reading channel peer info from disk: {:?}", e),
+ }
+
+ // Start the CLI.
+ cli::poll_for_user_input(peer_manager.clone(), channel_manager.clone(), router.clone(),
+ payment_info, keys_manager.get_node_secret(), event_ntfn_sender,
+ ldk_data_dir.clone(), logger.clone(), handle);