From bd2fb50c819c2b180758308ef3751e7ea73e6ab7 Mon Sep 17 00:00:00 2001 From: Julien Dessaux Date: Mon, 17 Feb 2025 00:40:43 +0100 Subject: [golang] implement shipyards visits --- golang/pkg/api/api.go | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) (limited to 'golang/pkg/api/api.go') 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 -- cgit v1.2.3