mirror of
https://github.com/d0zingcat/gocryptotrader.git
synced 2026-05-31 15:10:42 +00:00
Websocket: Restructure files and types (#1859)
* Websocket: Rename stream package * Websocket: Rename Websocket to Manager * Websocket: Replace explicit errs with common.NilGuard * Websocket: Move websocket_types.go to types.go * Websocket: Minor field comment and alignment in types * Webosocket: Rename WebsocketConnection to Connection * Alphapoint: Make gorilla ws import explicit Just to avoid confusion with our own packages. * Websocket: Move stream_match to match * Websocket: Move websocket_connection to connection * Websocket: Move websocket.go to manager.go * Websocket: Break out all subscription methods into subscriptions.go * Websocket: Move connection type into its file * Websocket: Remove PositionUpdated Type is not used anywhere * Kraken: Use local constant for pong Was the only use of websocket.Pong and doesn't really feel right to represent kraken's api resp in one of our packages * Websocket: Move connection sub-types to connection package * Websocket: Move manager types into manager * Websocket: Move ConnectionWrapper into manager * Websocket: Move websocket_test to manager_test * Websocket: Privatise connectionWrapper * Websocket: Remaining types into types.go These really belong somewhere else mostly, but this will do for now * Websocket: Tidy up connection method vars * Gofumpt: Moving package imports around * Websocket: Rename errDuplicateConnectionSetup * Websocket: Fix duplicate import of gws * Websocket: Fix gofumpt -extra * Websocket: Standardise import of gws across other pkgs * Kraken: Remove unused sub conf consts These were replaced by the generic Levels and Depth fields on all subs * Websocket: Privitise ConnectioWrapper fields * Websocket: inline single use var WebsocketNotAuthenticatedUsingRest * Websocket: Move documentation to template * Bithumb: Assertify TestWsHandleData
This commit is contained in:
@@ -9,17 +9,17 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/Masterminds/sprig/v3"
|
||||
"github.com/gorilla/websocket"
|
||||
gws "github.com/gorilla/websocket"
|
||||
"github.com/thrasher-corp/gocryptotrader/common"
|
||||
"github.com/thrasher-corp/gocryptotrader/currency"
|
||||
"github.com/thrasher-corp/gocryptotrader/encoding/json"
|
||||
"github.com/thrasher-corp/gocryptotrader/exchanges/asset"
|
||||
"github.com/thrasher-corp/gocryptotrader/exchanges/kline"
|
||||
"github.com/thrasher-corp/gocryptotrader/exchanges/request"
|
||||
"github.com/thrasher-corp/gocryptotrader/exchanges/stream"
|
||||
"github.com/thrasher-corp/gocryptotrader/exchanges/subscription"
|
||||
"github.com/thrasher-corp/gocryptotrader/exchanges/ticker"
|
||||
"github.com/thrasher-corp/gocryptotrader/exchanges/trade"
|
||||
"github.com/thrasher-corp/gocryptotrader/internal/exchange/websocket"
|
||||
)
|
||||
|
||||
const (
|
||||
@@ -37,10 +37,10 @@ var defaultSubscriptions = subscription.List{
|
||||
// WsConnect initiates a websocket connection
|
||||
func (b *Bithumb) WsConnect() error {
|
||||
if !b.Websocket.IsEnabled() || !b.IsEnabled() {
|
||||
return stream.ErrWebsocketNotEnabled
|
||||
return websocket.ErrWebsocketNotEnabled
|
||||
}
|
||||
|
||||
var dialer websocket.Dialer
|
||||
var dialer gws.Dialer
|
||||
dialer.HandshakeTimeout = b.Config.HTTPTimeout
|
||||
dialer.Proxy = http.ProxyFromEnvironment
|
||||
|
||||
@@ -92,7 +92,7 @@ func (b *Bithumb) wsHandleData(respRaw []byte) error {
|
||||
}
|
||||
return fmt.Errorf("%s: %w",
|
||||
resp.ResponseMessage,
|
||||
stream.ErrSubscriptionFailure)
|
||||
websocket.ErrSubscriptionFailure)
|
||||
}
|
||||
|
||||
switch resp.Type {
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package bithumb
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
@@ -11,9 +10,9 @@ import (
|
||||
exchange "github.com/thrasher-corp/gocryptotrader/exchanges"
|
||||
"github.com/thrasher-corp/gocryptotrader/exchanges/asset"
|
||||
"github.com/thrasher-corp/gocryptotrader/exchanges/kline"
|
||||
"github.com/thrasher-corp/gocryptotrader/exchanges/stream"
|
||||
"github.com/thrasher-corp/gocryptotrader/exchanges/subscription"
|
||||
"github.com/thrasher-corp/gocryptotrader/exchanges/ticker"
|
||||
"github.com/thrasher-corp/gocryptotrader/internal/exchange/websocket"
|
||||
testexch "github.com/thrasher-corp/gocryptotrader/internal/testing/exchange"
|
||||
testsubs "github.com/thrasher-corp/gocryptotrader/internal/testing/subscriptions"
|
||||
)
|
||||
@@ -27,12 +26,7 @@ var (
|
||||
func TestWsHandleData(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
pairs := currency.Pairs{
|
||||
currency.Pair{
|
||||
Base: currency.BTC,
|
||||
Quote: currency.USDT,
|
||||
},
|
||||
}
|
||||
pairs := currency.Pairs{currency.NewBTCUSDT()}
|
||||
|
||||
dummy := Bithumb{
|
||||
location: time.Local,
|
||||
@@ -53,9 +47,7 @@ func TestWsHandleData(t *testing.T) {
|
||||
},
|
||||
},
|
||||
},
|
||||
Websocket: &stream.Websocket{
|
||||
DataHandler: make(chan any, 1),
|
||||
},
|
||||
Websocket: websocket.NewManager(),
|
||||
},
|
||||
}
|
||||
|
||||
@@ -64,36 +56,20 @@ func TestWsHandleData(t *testing.T) {
|
||||
|
||||
welcomeMsg := []byte(`{"status":"0000","resmsg":"Connected Successfully"}`)
|
||||
err := dummy.wsHandleData(welcomeMsg)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
require.NoError(t, err)
|
||||
|
||||
err = dummy.wsHandleData([]byte(`{"status":"1336","resmsg":"Failed"}`))
|
||||
if !errors.Is(err, stream.ErrSubscriptionFailure) {
|
||||
t.Fatalf("received: %v but expected: %v",
|
||||
err,
|
||||
stream.ErrSubscriptionFailure)
|
||||
}
|
||||
require.ErrorIs(t, err, websocket.ErrSubscriptionFailure)
|
||||
|
||||
err = dummy.wsHandleData(wsTransResp)
|
||||
require.NoError(t, err)
|
||||
|
||||
err = dummy.wsHandleData(wsOrderbookResp)
|
||||
require.NoError(t, err)
|
||||
|
||||
err = dummy.wsHandleData(wsTickerResp)
|
||||
if !errors.Is(err, nil) {
|
||||
t.Fatalf("received: %v but expected: %v", err, nil)
|
||||
}
|
||||
|
||||
handled := <-dummy.Websocket.DataHandler
|
||||
if _, ok := handled.(*ticker.Price); !ok {
|
||||
t.Fatal("unexpected value")
|
||||
}
|
||||
|
||||
err = dummy.wsHandleData(wsTransResp) // This doesn't pipe to datahandler
|
||||
if !errors.Is(err, nil) {
|
||||
t.Fatalf("received: %v but expected: %v", err, nil)
|
||||
}
|
||||
|
||||
err = dummy.wsHandleData(wsOrderbookResp) // This doesn't pipe to datahandler
|
||||
if !errors.Is(err, nil) {
|
||||
t.Fatalf("received: %v but expected: %v", err, nil)
|
||||
}
|
||||
require.NoError(t, err)
|
||||
assert.IsType(t, new(ticker.Price), <-dummy.Websocket.DataHandler, "ticker should send a price to the DataHandler")
|
||||
}
|
||||
|
||||
func TestSubToReq(t *testing.T) {
|
||||
|
||||
@@ -25,9 +25,9 @@ import (
|
||||
"github.com/thrasher-corp/gocryptotrader/exchanges/orderbook"
|
||||
"github.com/thrasher-corp/gocryptotrader/exchanges/protocol"
|
||||
"github.com/thrasher-corp/gocryptotrader/exchanges/request"
|
||||
"github.com/thrasher-corp/gocryptotrader/exchanges/stream"
|
||||
"github.com/thrasher-corp/gocryptotrader/exchanges/ticker"
|
||||
"github.com/thrasher-corp/gocryptotrader/exchanges/trade"
|
||||
"github.com/thrasher-corp/gocryptotrader/internal/exchange/websocket"
|
||||
"github.com/thrasher-corp/gocryptotrader/log"
|
||||
"github.com/thrasher-corp/gocryptotrader/portfolio/withdraw"
|
||||
)
|
||||
@@ -131,7 +131,7 @@ func (b *Bithumb) SetDefaults() {
|
||||
log.Errorln(log.ExchangeSys, err)
|
||||
}
|
||||
|
||||
b.Websocket = stream.NewWebsocket()
|
||||
b.Websocket = websocket.NewManager()
|
||||
b.WebsocketResponseMaxLimit = exchange.DefaultWebsocketResponseMaxLimit
|
||||
b.WebsocketResponseCheckTimeout = exchange.DefaultWebsocketResponseCheckTimeout
|
||||
}
|
||||
@@ -155,7 +155,7 @@ func (b *Bithumb) Setup(exch *config.Exchange) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = b.Websocket.Setup(&stream.WebsocketSetup{
|
||||
err = b.Websocket.Setup(&websocket.ManagerSetup{
|
||||
ExchangeConfig: exch,
|
||||
DefaultURL: wsEndpoint,
|
||||
RunningURL: ePoint,
|
||||
@@ -168,7 +168,7 @@ func (b *Bithumb) Setup(exch *config.Exchange) error {
|
||||
return err
|
||||
}
|
||||
|
||||
return b.Websocket.SetupNewConnection(&stream.ConnectionSetup{
|
||||
return b.Websocket.SetupNewConnection(&websocket.ConnectionSetup{
|
||||
ResponseCheckTimeout: exch.WebsocketResponseCheckTimeout,
|
||||
ResponseMaxLimit: exch.WebsocketResponseMaxLimit,
|
||||
RateLimit: request.NewWeightedRateLimitByDuration(time.Second),
|
||||
|
||||
Reference in New Issue
Block a user