Dont block tokio reactor waiting on user input
[ldk-sample] / src / cli.rs
index dab8bac9860b203a4c777637069babda8b44e581..75b79673a11ba8aa342275c78b0042d0a97073f1 100644 (file)
@@ -60,7 +60,7 @@ impl Writeable for UserOnionMessageContents {
        }
 }
 
-pub(crate) async fn poll_for_user_input(
+pub(crate) fn poll_for_user_input(
        peer_manager: Arc<PeerManager>, channel_manager: Arc<ChannelManager>,
        keys_manager: Arc<KeysManager>, network_graph: Arc<NetworkGraph>,
        onion_messenger: Arc<OnionMessenger>, inbound_payments: Arc<Mutex<PaymentInfoStorage>>,
@@ -112,8 +112,12 @@ pub(crate) async fn poll_for_user_input(
                                                continue;
                                        }
 
-                                       if connect_peer_if_necessary(pubkey, peer_addr, peer_manager.clone())
-                                               .await
+                                       if tokio::runtime::Handle::current()
+                                               .block_on(connect_peer_if_necessary(
+                                                       pubkey,
+                                                       peer_addr,
+                                                       peer_manager.clone(),
+                                               ))
                                                .is_err()
                                        {
                                                continue;
@@ -259,8 +263,12 @@ pub(crate) async fn poll_for_user_input(
                                                                continue;
                                                        }
                                                };
-                                       if connect_peer_if_necessary(pubkey, peer_addr, peer_manager.clone())
-                                               .await
+                                       if tokio::runtime::Handle::current()
+                                               .block_on(connect_peer_if_necessary(
+                                                       pubkey,
+                                                       peer_addr,
+                                                       peer_manager.clone(),
+                                               ))
                                                .is_ok()
                                        {
                                                println!("SUCCESS: connected to peer {}", pubkey);
@@ -373,14 +381,14 @@ pub(crate) async fn poll_for_user_input(
                                "listpeers" => list_peers(peer_manager.clone()),
                                "signmessage" => {
                                        const MSG_STARTPOS: usize = "signmessage".len() + 1;
-                                       if line.as_bytes().len() <= MSG_STARTPOS {
+                                       if line.trim().as_bytes().len() <= MSG_STARTPOS {
                                                println!("ERROR: signmsg requires a message");
                                                continue;
                                        }
                                        println!(
                                                "{:?}",
                                                lightning::util::message_signing::sign(
-                                                       &line.as_bytes()[MSG_STARTPOS..],
+                                                       &line.trim().as_bytes()[MSG_STARTPOS..],
                                                        &keys_manager.get_node_secret_key()
                                                )
                                        );