diff --git a/core/archipelago/src/server.rs b/core/archipelago/src/server.rs index 391347f0..9180c90f 100644 --- a/core/archipelago/src/server.rs +++ b/core/archipelago/src/server.rs @@ -61,6 +61,26 @@ impl Server { } state_manager.update_data(data.clone()).await; + // Retry Tor address in background — Tor may not be ready at startup + if data.server_info.tor_address.is_none() { + let sm = state_manager.clone(); + let pubkey = identity.pubkey_hex(); + tokio::spawn(async move { + for delay in [5, 10, 20, 30, 60] { + tokio::time::sleep(std::time::Duration::from_secs(delay)).await; + if let Some(tor) = docker_packages::read_tor_address("archipelago").await { + let (mut d, _) = sm.get_snapshot().await; + let addr = format!("archipelago://{}#{}", tor.trim_end_matches('/'), pubkey); + d.server_info.tor_address = Some(tor.clone()); + d.server_info.node_address = Some(addr); + sm.update_data(d).await; + tracing::info!("Tor address discovered after startup: {}", &tor[..20.min(tor.len())]); + break; + } + } + }); + } + // Load persisted messages (Archipelago channel) node_message::init(&config.data_dir).await;