fix: improve connection retry logic for Stardust compositor with error handling

This commit is contained in:
MayaTheShy
2025-11-09 16:57:31 -05:00
parent 0e4f1ba823
commit 532e1ddda5

View File

@@ -358,12 +358,26 @@ pub extern "C" fn sdxr_start(app_id: *const std::os::raw::c_char) -> i32 {
}
});
println!("[bridge] Connecting to Stardust server...");
// Retry fusion connect for a few seconds to handle compositor wake-up races.
// Retry fusion connect with a timeout to detect missing compositor
let max_retries = 10; // 5 seconds total (10 * 500ms)
let mut retry_count = 0;
let mut client = loop {
match stardust_xr_fusion::client::Client::connect().await {
Ok(c) => break c,
Ok(c) => {
println!("[bridge] Successfully connected to Stardust compositor");
break c;
}
Err(e) => {
eprintln!("[bridge] Fusion connect failed: {:?}; retrying...", e);
retry_count += 1;
if retry_count >= max_retries {
eprintln!("[bridge] ERROR: Could not connect to Stardust compositor after {} attempts", max_retries);
eprintln!("[bridge] ERROR: {:?}", e);
eprintln!("[bridge] Make sure the Stardust server is running:");
eprintln!("[bridge] systemctl --user start stardust");
eprintln!("[bridge] or: stardust-xr-server");
return; // Exit the async block, which will cause sdxr_start to return error
}
eprintln!("[bridge] Fusion connect failed (attempt {}/{}): {:?}; retrying...", retry_count, max_retries, e);
tokio::time::sleep(std::time::Duration::from_millis(500)).await;
if STOP_REQUESTED.load(Ordering::SeqCst) { return; }
}