mirror of
https://github.com/nbd-wtf/go-nostr.git
synced 2025-03-17 21:32:56 +01:00
nip46: do not allow one faulty relay to break RPC calls to other relays.
This commit is contained in:
parent
1db4da7ed3
commit
5edb54efee
@ -205,17 +205,25 @@ func (bunker *BunkerClient) RPC(ctx context.Context, method string, params []str
|
||||
|
||||
respWaiter := make(chan Response)
|
||||
bunker.listeners.Store(id, respWaiter)
|
||||
hasWorked := false
|
||||
hasWorked := make(chan struct{})
|
||||
|
||||
for _, r := range bunker.relays {
|
||||
relay, err := bunker.pool.EnsureRelay(r)
|
||||
if err == nil {
|
||||
hasWorked = true
|
||||
}
|
||||
relay.Publish(ctx, evt)
|
||||
for _, url := range bunker.relays {
|
||||
go func(url string) {
|
||||
relay, err := bunker.pool.EnsureRelay(url)
|
||||
if err == nil {
|
||||
select {
|
||||
case hasWorked <- struct{}{}:
|
||||
default:
|
||||
}
|
||||
}
|
||||
relay.Publish(ctx, evt)
|
||||
}(url)
|
||||
}
|
||||
|
||||
if !hasWorked {
|
||||
select {
|
||||
case <-hasWorked:
|
||||
// continue
|
||||
case <-ctx.Done():
|
||||
return "", fmt.Errorf("couldn't connect to any relay")
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user