From c8844f7d0fed941a07fa84b1b73959ed90e1c81b Mon Sep 17 00:00:00 2001 From: Anthony Accioly <1591739+aaccioly@users.noreply.github.com> Date: Fri, 4 Jul 2025 18:35:06 +0100 Subject: [PATCH] feat(bunker): publish bunker connect responses concurrently - Introduce goroutines to handle concurrent publishing to target relays. - Use `sync/atomic` for thread-safe success counter tracking - Add `WaitGroup` to ensure all goroutines complete before proceeding. --- bunker.go | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/bunker.go b/bunker.go index 9f7303a..42f808d 100644 --- a/bunker.go +++ b/bunker.go @@ -13,6 +13,7 @@ import ( "slices" "strings" "sync" + "sync/atomic" "time" "fiatjaf.com/nostr" @@ -466,6 +467,7 @@ var bunker = &cli.Command{ log("Subscription updated to include new relays\n") } + // Prepare the response payload responsePayload := nip46.Response{ ID: secret, Result: "ack", @@ -507,30 +509,36 @@ var bunker = &cli.Command{ return } - // Create a fake Kind 24133 connect request to process through the signer targetRelays := newRelayURLs if len(targetRelays) == 0 { targetRelays = relayURLs } log("Sending connect response...\n") - successCount := 0 + successCount := atomic.Uint32{} + handlerWg.Add(len(targetRelays)) for _, relayURL := range targetRelays { - if relay, _ := sys.Pool.EnsureRelay(relayURL); relay != nil { - err := relay.Publish(ctx, eventResponse) - if err != nil { - log("Failed to publish to %s: %v\n", relayURL, err) - } else { - log("Published connect response to %s\n", color.GreenString(relayURL)) - successCount++ + go func(relayURL string) { + if relay, _ := sys.Pool.EnsureRelay(relayURL); relay != nil { + err := relay.Publish(ctx, eventResponse) + printLock.Lock() + if err != nil { + log("Failed to publish to %s: %v\n", relayURL, err) + } else { + log("Published connect response to %s\n", color.GreenString(relayURL)) + successCount.Add(1) + } + printLock.Unlock() + handlerWg.Done() } - } + }(relayURL) } + handlerWg.Wait() - if successCount == 0 { + if successCount.Load() == 0 { log("Error: Failed to publish connect response to any relay\n") } else { - log(color.GreenString("\nConnect response sent successfully to %d relay(s)!\n"), successCount) + log(color.GreenString("\nConnect response sent successfully to %d relay(s)!\n"), successCount.Load()) } }