From 39f7a99894b77682319dcca1a028a01842369609 Mon Sep 17 00:00:00 2001 From: 1l0 Date: Tue, 24 Sep 2024 15:08:27 +0900 Subject: [PATCH] make context work --- nip46/client.go | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/nip46/client.go b/nip46/client.go index e311c0d..713d260 100644 --- a/nip46/client.go +++ b/nip46/client.go @@ -76,7 +76,6 @@ func ConnectBunker( pool, onAuth, ) - _, err = bunker.RPC(ctx, "connect", []string{targetPublicKey, secret}) return bunker, err } @@ -237,6 +236,10 @@ func (bunker *BunkerClient) RPC(ctx context.Context, method string, params []str respWaiter := make(chan Response) bunker.listeners.Store(id, respWaiter) + defer func() { + bunker.listeners.Delete(id) + close(respWaiter) + }() hasWorked := make(chan struct{}) for _, url := range bunker.relays { @@ -259,10 +262,13 @@ func (bunker *BunkerClient) RPC(ctx context.Context, method string, params []str return "", fmt.Errorf("couldn't connect to any relay") } - resp := <-respWaiter - if resp.Error != "" { - return "", fmt.Errorf("response error: %s", resp.Error) + select { + case <-ctx.Done(): + return "", fmt.Errorf("context canceled") + case resp := <-respWaiter: + if resp.Error != "" { + return "", fmt.Errorf("response error: %s", resp.Error) + } + return resp.Result, nil } - - return resp.Result, nil }