summaryrefslogtreecommitdiff
path: root/golang/pkg/api/api.go
diff options
context:
space:
mode:
authorJulien Dessaux2025-02-17 00:40:43 +0100
committerJulien Dessaux2025-02-17 00:40:43 +0100
commitbd2fb50c819c2b180758308ef3751e7ea73e6ab7 (patch)
tree19632f7098691a1147357039a5efedf7c40a8d53 /golang/pkg/api/api.go
parent[golang] handle paginated requests (diff)
downloadspacetraders-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.go16
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