diff --git a/examples/kucoin/websocket.go b/examples/kucoin/websocket.go index 911835e42..f5991400a 100644 --- a/examples/kucoin/websocket.go +++ b/examples/kucoin/websocket.go @@ -3,7 +3,6 @@ package main import ( "context" "errors" - "net/url" "os" "os/signal" "time" @@ -59,7 +58,7 @@ var websocketCmd = &cobra.Command{ } - u, err := url.Parse(bullet.InstanceServers[0].Endpoint) + u, err := bullet.URL() if err != nil { return err } @@ -67,12 +66,7 @@ var websocketCmd = &cobra.Command{ interrupt := make(chan os.Signal, 1) signal.Notify(interrupt, os.Interrupt) - params := url.Values{} - params.Add("token", bullet.Token) - u.RawQuery = params.Encode() - logrus.Infof("connecting %s", u.String()) - c, _, err := websocket.DefaultDialer.Dial(u.String(), nil) if err != nil { return err diff --git a/pkg/exchange/kucoin/kucoinapi/bullet.go b/pkg/exchange/kucoin/kucoinapi/bullet.go index 03b8e00eb..95f40d68e 100644 --- a/pkg/exchange/kucoin/kucoinapi/bullet.go +++ b/pkg/exchange/kucoin/kucoinapi/bullet.go @@ -6,6 +6,7 @@ import ( "net/url" "github.com/c9s/bbgo/pkg/util" + "github.com/pkg/errors" ) // ApiClient defines the request builder method and request method for the API service @@ -48,6 +49,23 @@ type Bullet struct { Token string `json:"token"` } +func (b *Bullet) URL() (*url.URL, error) { + if len(b.InstanceServers) == 0 { + return nil, errors.New("InstanceServers is empty") + } + + u, err := url.Parse(b.InstanceServers[0].Endpoint) + if err != nil { + return nil, err + } + + params := url.Values{} + params.Add("token", b.Token) + + u.RawQuery = params.Encode() + return u, nil +} + func (r *GetPublicBulletRequest) Do(ctx context.Context) (*Bullet, error) { req, err := r.client.NewRequest("POST", "/api/v1/bullet-public", nil, nil) if err != nil {