fix: Rebind Iroh endpoint on room join to fix restart bug
This commit is contained in:
+16
-10
@@ -44,6 +44,7 @@ impl CoreController {
|
||||
}
|
||||
|
||||
struct ActiveSession {
|
||||
endpoint: Endpoint,
|
||||
router: Router,
|
||||
room_state: Arc<IrohGossipState>,
|
||||
capture_thread: std::thread::JoinHandle<()>,
|
||||
@@ -88,15 +89,6 @@ async fn run_core_loop(
|
||||
let memory_lookup = iroh::address_lookup::memory::MemoryLookup::new();
|
||||
let secret_key = iroh::SecretKey::generate();
|
||||
|
||||
// Bind local endpoint on a random port
|
||||
let endpoint = Endpoint::builder(presets::N0)
|
||||
.secret_key(secret_key)
|
||||
.address_lookup(memory_lookup.clone())
|
||||
.bind()
|
||||
.await?;
|
||||
|
||||
endpoint.online().await;
|
||||
|
||||
let audio_backend = Arc::new(PipeWireBackend::new());
|
||||
|
||||
let is_muted = Arc::new(AtomicBool::new(false));
|
||||
@@ -119,6 +111,19 @@ async fn run_core_loop(
|
||||
session.shutdown(audio_backend.clone()).await;
|
||||
}
|
||||
|
||||
let endpoint = match Endpoint::builder(presets::N0)
|
||||
.secret_key(secret_key.clone())
|
||||
.address_lookup(memory_lookup.clone())
|
||||
.bind()
|
||||
.await {
|
||||
Ok(ep) => ep,
|
||||
Err(e) => {
|
||||
let _ = ui_tx.send(UiEvent::Error(format!("Failed to bind endpoint: {}", e))).await;
|
||||
continue;
|
||||
}
|
||||
};
|
||||
endpoint.online().await;
|
||||
|
||||
// Determine target ticket
|
||||
let ticket_str = if ticket.trim().is_empty() || ticket == "create" {
|
||||
let topic_id: [u8; 32] = rand::random();
|
||||
@@ -370,6 +375,7 @@ async fn run_core_loop(
|
||||
});
|
||||
|
||||
let session = ActiveSession {
|
||||
endpoint: endpoint.clone(),
|
||||
router,
|
||||
room_state: room_state.clone(),
|
||||
capture_thread,
|
||||
@@ -399,7 +405,7 @@ async fn run_core_loop(
|
||||
let self_state = PeerState {
|
||||
name: current_name.clone(),
|
||||
is_muted: new_state,
|
||||
addr: endpoint.addr(),
|
||||
addr: session.endpoint.addr(),
|
||||
};
|
||||
let _ = session.room_state.update_self_state(self_state).await;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user