diff options
author | Julien Dessaux | 2025-02-17 00:40:43 +0100 |
---|---|---|
committer | Julien Dessaux | 2025-02-17 00:40:43 +0100 |
commit | bd2fb50c819c2b180758308ef3751e7ea73e6ab7 (patch) | |
tree | 19632f7098691a1147357039a5efedf7c40a8d53 /golang/pkg/api/api.go | |
parent | [golang] handle paginated requests (diff) | |
download | spacetraders-bd2fb50c819c2b180758308ef3751e7ea73e6ab7.tar.gz spacetraders-bd2fb50c819c2b180758308ef3751e7ea73e6ab7.tar.bz2 spacetraders-bd2fb50c819c2b180758308ef3751e7ea73e6ab7.zip |
[golang] implement shipyards visits
Diffstat (limited to 'golang/pkg/api/api.go')
-rw-r--r-- | golang/pkg/api/api.go | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/golang/pkg/api/api.go b/golang/pkg/api/api.go index 1975e2e..6520251 100644 --- a/golang/pkg/api/api.go +++ b/golang/pkg/api/api.go @@ -72,14 +72,14 @@ func (c *Client) Send(method string, uriRef *url.URL, payload any, response any) return res.Err } if err := res.Message.Error; err != nil { - return err - } - err := res.Message.Error - if err != nil { switch err.Code { case 4214: e := decodeShipInTransitError(err.Data) - time.Sleep(e.SecondsToArrival.Duration() * time.Second) + select { + case <-c.ctx.Done(): + return fmt.Errorf("failed to send: ctx cancelled") + case <-time.After(e.SecondsToArrival.Duration() * time.Second): + } return c.Send(method, uriRef, payload, response) default: return err @@ -193,7 +193,11 @@ func (c *Client) sendOne(method string, uri *url.URL, payload any) (*APIMessage, switch resp.StatusCode { case 429: e := decodeRateLimitError(msg.Error.Data) - time.Sleep(e.RetryAfter.Duration() * time.Second) + select { + case <-c.ctx.Done(): + return nil, fmt.Errorf("failed to sendOne: ctx cancelled") + case <-time.After(e.RetryAfter.Duration() * time.Second): + } return c.sendOne(method, uri, payload) } return &msg, nil |