mirror of
https://github.com/romanz/electrs.git
synced 2026-08-17 13:06:27 +02:00
feat: add reply path from electrs back to wallet via Iroh
This commit is contained in:
parent
18442897da
commit
2dd02addc2
1 changed files with 16 additions and 11 deletions
|
|
@ -74,27 +74,32 @@ async fn handle_iroh_conn(
|
|||
// electrs benachrichtigen: neue Verbindung
|
||||
server_tx.send(Event { peer_id, msg: Message::New(tcp_for_electrs) })?;
|
||||
|
||||
// Thread 1: Iroh → Socket (Wallet sendet Anfrage → electrs)
|
||||
let tx2 = server_tx.clone();
|
||||
// Thread: electrs → Iroh (Antworten von electrs zur Wallet)
|
||||
let (reply_tx, reply_rx) = std::sync::mpsc::channel::<Vec<u8>>();
|
||||
std::thread::spawn(move || {
|
||||
let mut buf = vec![0u8; 4096];
|
||||
loop {
|
||||
// Iroh lesen (blockierend via tokio block_in_place nicht möglich hier,
|
||||
// daher nutzen wir einen sync-Kanal)
|
||||
// Dieser Thread wartet auf Daten vom Socket (von electrs geschrieben)
|
||||
// und leitet sie an Iroh weiter
|
||||
match sock_read.read(&mut buf) {
|
||||
Ok(0) => break,
|
||||
Ok(0) | Err(_) => break,
|
||||
Ok(n) => {
|
||||
// Das ist der electrs→Wallet Weg (Antworten)
|
||||
// wird im nächsten Schritt verbunden
|
||||
let _ = n;
|
||||
if reply_tx.send(buf[..n].to_vec()).is_err() {
|
||||
break;
|
||||
}
|
||||
}
|
||||
Err(_) => break,
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// Async: Kanal → Iroh senden
|
||||
tokio::spawn(async move {
|
||||
while let Ok(data) = reply_rx.recv() {
|
||||
if iroh_send.write_all(&data).await.is_err() {
|
||||
break;
|
||||
}
|
||||
}
|
||||
let _ = iroh_send.finish();
|
||||
});
|
||||
|
||||
// Iroh recv → server_tx (zeilenweise, wie TCP)
|
||||
let mut iroh_buf = Vec::new();
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue