mirror of
https://github.com/d0zingcat/gocryptotrader.git
synced 2026-05-24 07:26:47 +00:00
exchanges/websocket: Implement subscription configuration (#1394)
* Websockets: Move Subscription to its own package This allows the small type to be imported from both `config` and from `stream` without an import cycle, so we don't have to repeat ourselves * Subs: Renamed Currency to Pair This was being mis-used through much of the code, and since we're already touching everything, we might as well fix it * Websockets: Add Subscription configuration * Binance: Add subscription configuration * Kucoin: Subscription configuration * Simplify GenerateDefaultSubs * Improve TestGenSubs coverage * Test Candle Sub generation * Support Candle intervals * Full responsibility for formatting Channel name on GenerateDefaultSubs OR consumer of Subscribe * Simplify generatePayloads as a result * Fix test coverage of asset types in processMarketSnapshot * Exchanges: Abstract ParallelChanOp * Tests: Generic ws mock instances * Kucoin: Fix intermittent conflict in test currs Use isolated test instance for `TestGetOpenInterest`. `TestGetOpenInterest` would occassionally change pairs before GenerateDefault Subs.
This commit is contained in:
@@ -736,9 +736,9 @@ func (f *FTX) WsConnect() error {
|
||||
|
||||
```go
|
||||
// GenerateDefaultSubscriptions generates default subscription
|
||||
func (f *FTX) GenerateDefaultSubscriptions() ([]stream.ChannelSubscription, error) {
|
||||
var subscriptions []stream.ChannelSubscription
|
||||
subscriptions = append(subscriptions, stream.ChannelSubscription{
|
||||
func (f *FTX) GenerateDefaultSubscriptions() ([]subscription.Subscription, error) {
|
||||
var subscriptions []subscription.Subscription
|
||||
subscriptions = append(subscriptions, subscription.Subscription{
|
||||
Channel: wsMarkets,
|
||||
})
|
||||
// Ranges over available channels, pairs and asset types to produce a full
|
||||
@@ -756,9 +756,9 @@ func (f *FTX) GenerateDefaultSubscriptions() ([]stream.ChannelSubscription, erro
|
||||
"-")
|
||||
for x := range channels {
|
||||
subscriptions = append(subscriptions,
|
||||
stream.ChannelSubscription{
|
||||
subscription.Subscription{
|
||||
Channel: channels[x],
|
||||
Currency: newPair,
|
||||
Pair: newPair,
|
||||
Asset: assets[a],
|
||||
})
|
||||
}
|
||||
@@ -768,7 +768,7 @@ func (f *FTX) GenerateDefaultSubscriptions() ([]stream.ChannelSubscription, erro
|
||||
if f.IsWebsocketAuthenticationSupported() {
|
||||
var authchan = []string{wsOrders, wsFills}
|
||||
for x := range authchan {
|
||||
subscriptions = append(subscriptions, stream.ChannelSubscription{
|
||||
subscriptions = append(subscriptions, subscription.Subscription{
|
||||
Channel: authchan[x],
|
||||
})
|
||||
}
|
||||
@@ -811,7 +811,7 @@ type WsSub struct {
|
||||
|
||||
```go
|
||||
// Subscribe sends a websocket message to receive data from the channel
|
||||
func (f *FTX) Subscribe(channelsToSubscribe []stream.ChannelSubscription) error {
|
||||
func (f *FTX) Subscribe(channelsToSubscribe []subscription.Subscription) error {
|
||||
// For subscriptions we try to batch as much as possible to limit the amount
|
||||
// of connection usage but sometimes this is not supported on the exchange
|
||||
// API.
|
||||
@@ -827,13 +827,13 @@ channels:
|
||||
case wsFills, wsOrders, wsMarkets:
|
||||
// Authenticated wsFills && wsOrders or wsMarkets which is a channel subscription for the full set of tradable markets do not need a currency pair association.
|
||||
default:
|
||||
a, err := f.GetPairAssetType(channelsToSubscribe[i].Currency)
|
||||
a, err := f.GetPairAssetType(channelsToSubscribe[i].Pair)
|
||||
if err != nil {
|
||||
errs = append(errs, err)
|
||||
continue channels
|
||||
}
|
||||
// Ensures our outbound currency pair is formatted correctly, sometimes our configuration format is different from what our request format needs to be.
|
||||
formattedPair, err := f.FormatExchangeCurrency(channelsToSubscribe[i].Currency, a)
|
||||
formattedPair, err := f.FormatExchangeCurrency(channelsToSubscribe[i].Pair, a)
|
||||
if err != nil {
|
||||
errs = append(errs, err)
|
||||
continue channels
|
||||
@@ -1065,7 +1065,7 @@ func (f *FTX) WsAuth(ctx context.Context) error {
|
||||
|
||||
```go
|
||||
// Unsubscribe sends a websocket message to stop receiving data from the channel
|
||||
func (f *FTX) Unsubscribe(channelsToUnsubscribe []stream.ChannelSubscription) error {
|
||||
func (f *FTX) Unsubscribe(channelsToUnsubscribe []subscription.Subscription) error {
|
||||
// As with subscribing we want to batch as much as possible, but sometimes this cannot be achieved due to API shortfalls.
|
||||
var errs common.Errors
|
||||
channels:
|
||||
@@ -1076,13 +1076,13 @@ channels:
|
||||
switch channelsToUnsubscribe[i].Channel {
|
||||
case wsFills, wsOrders, wsMarkets:
|
||||
default:
|
||||
a, err := f.GetPairAssetType(channelsToUnsubscribe[i].Currency)
|
||||
a, err := f.GetPairAssetType(channelsToUnsubscribe[i].Pair)
|
||||
if err != nil {
|
||||
errs = append(errs, err)
|
||||
continue channels
|
||||
}
|
||||
|
||||
formattedPair, err := f.FormatExchangeCurrency(channelsToUnsubscribe[i].Currency, a)
|
||||
formattedPair, err := f.FormatExchangeCurrency(channelsToUnsubscribe[i].Pair, a)
|
||||
if err != nil {
|
||||
errs = append(errs, err)
|
||||
continue channels
|
||||
|
||||
Reference in New Issue
Block a user