Try reconnecting to disconnected deck before giving up

This commit is contained in:
Aode (Lion) 2021-10-02 23:07:40 -05:00
parent b72b8e0b9f
commit 6345fc102d

View file

@ -34,8 +34,9 @@ struct ConnectedDeck {
struct Inner {
pending_ports: HashSet<String>,
connected_decks: HashMap<String, ConnectedDeck>,
children: HashMap<usize, String>,
ignored_ports: HashSet<String>,
retrying_ports: HashSet<String>,
children: HashMap<usize, String>,
}
#[derive(Clone)]
@ -117,17 +118,19 @@ impl Manager {
)
}
#[tracing::instrument(skip(_ctx))]
#[tracing::instrument(skip(ctx))]
fn on_remove<'a>(
&'a mut self,
child_id: usize,
_ctx: &'a mut Context<ManagerMessage>,
ctx: &'a mut Context<ManagerMessage>,
) -> BoxFuture<'a> {
Box::pin(
async move {
let mut inner = self.inner.write().await;
if let Some(port_name) = inner.children.remove(&child_id) {
inner.connected_decks.remove(&port_name);
inner.retrying_ports.insert(port_name.clone());
ctx.handle().send(ManagerMessage::Found(port_name)).await?;
}
Ok(())
}
@ -142,7 +145,10 @@ impl Manager {
#[tracing::instrument]
async fn ignored(&mut self, port_name: String) -> tokio_actors::Result<()> {
tracing::debug!("ignored");
self.inner.write().await.ignored_ports.insert(port_name);
let mut inner = self.inner.write().await;
if !inner.retrying_ports.remove(&port_name) {
inner.ignored_ports.insert(port_name);
}
Ok(())
}