summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias Beyer <mail@beyermatthias.de>2021-12-10 16:58:59 +0100
committerMatthias Beyer <mail@beyermatthias.de>2021-12-10 16:58:59 +0100
commite04c9d592567292f1701ff37e17ccc9181e96dc6 (patch)
tree32b4ea3f9792372e81b6fb9426b0f0eef30c31e7
parent3767ecd55bbfea76afc1ae80a0dc7911832a9aa1 (diff)
Implement connecting to other peer
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
-rw-r--r--lib/src/reactor/mod.rs20
1 files changed, 20 insertions, 0 deletions
diff --git a/lib/src/reactor/mod.rs b/lib/src/reactor/mod.rs
index 9e22b1e..c35cecc 100644
--- a/lib/src/reactor/mod.rs
+++ b/lib/src/reactor/mod.rs
@@ -24,6 +24,8 @@ pub enum ReactorRequest<CustomRequest: Debug + Send + Sync> {
/// Quit the reactor
Exit,
+ Connect(ipfs::MultiaddrWithPeerId),
+
Custom(CustomRequest),
}
@@ -32,6 +34,8 @@ pub enum ReactorReply<CustomReply: Debug + Send + Sync> {
Pong,
Exiting,
+ ConnectResult((Result<()>, ipfs::MultiaddrWithPeerId)),
+
Custom(CustomReply),
}
@@ -107,6 +111,22 @@ impl<CustomReactorRequest, CustomReactorReply> Reactor<CustomReactorRequest, Cus
Ok(None)
},
+ (ReactorRequest::Connect(addr), reply_channel) => {
+ match self.profile.read().await.client().connect(addr.clone()).await {
+ Ok(()) => if let Err(_) = reply_channel.send(ReactorReply::ConnectResult((Ok(()), addr.clone()))) {
+ anyhow::bail!("Failed sending ConnectResult({}, Ok(()))", addr)
+ } else {
+ Ok(None)
+ }
+
+ Err(e) => if let Err(_) = reply_channel.send(ReactorReply::ConnectResult((Err(e), addr.clone()))) {
+ anyhow::bail!("Failed sending ConnectResult({}, Err(_))", addr)
+ } else {
+ Ok(None)
+ }
+ }
+ }
+
(ReactorRequest::Custom(c), reply_channel) => {
Ok(Some((c, reply_channel)))
}