mirror of
https://github.com/c9s/bbgo.git
synced 2024-11-22 14:55:16 +00:00
pkg/exchange: add conn count info event
This commit is contained in:
parent
907a1c8c53
commit
57618ced7c
|
@ -99,10 +99,12 @@ func parseWebSocketEvent(in []byte) (interface{}, error) {
|
||||||
type WsEventType string
|
type WsEventType string
|
||||||
|
|
||||||
const (
|
const (
|
||||||
WsEventTypeLogin = "login"
|
WsEventTypeLogin WsEventType = "login"
|
||||||
WsEventTypeError = "error"
|
WsEventTypeError WsEventType = "error"
|
||||||
WsEventTypeSubscribe = "subscribe"
|
WsEventTypeSubscribe WsEventType = "subscribe"
|
||||||
WsEventTypeUnsubscribe = "unsubscribe"
|
WsEventTypeUnsubscribe WsEventType = "unsubscribe"
|
||||||
|
WsEventTypeConnectionInfo WsEventType = "channel-conn-count"
|
||||||
|
WsEventTypeConnectionError WsEventType = "channel-conn-count-error"
|
||||||
)
|
)
|
||||||
|
|
||||||
type WebSocketEvent struct {
|
type WebSocketEvent struct {
|
||||||
|
@ -115,6 +117,8 @@ type WebSocketEvent struct {
|
||||||
} `json:"arg,omitempty"`
|
} `json:"arg,omitempty"`
|
||||||
Data json.RawMessage `json:"data"`
|
Data json.RawMessage `json:"data"`
|
||||||
ActionType ActionType `json:"action"`
|
ActionType ActionType `json:"action"`
|
||||||
|
Channel Channel `json:"channel"`
|
||||||
|
ConnCount string `json:"connCount"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (w *WebSocketEvent) IsValid() error {
|
func (w *WebSocketEvent) IsValid() error {
|
||||||
|
@ -133,6 +137,12 @@ func (w *WebSocketEvent) IsValid() error {
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
|
||||||
|
case WsEventTypeConnectionInfo:
|
||||||
|
return nil
|
||||||
|
|
||||||
|
case WsEventTypeConnectionError:
|
||||||
|
return fmt.Errorf("connection rate limit exceeded, channel: %s, connCount: %s", w.Channel, w.ConnCount)
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return fmt.Errorf("unexpected event type: %+v", w)
|
return fmt.Errorf("unexpected event type: %+v", w)
|
||||||
}
|
}
|
||||||
|
@ -401,3 +411,10 @@ func (m *MarketTradeEvent) toGlobalTrade() (types.Trade, error) {
|
||||||
FeeCurrency: "", // not supported
|
FeeCurrency: "", // not supported
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type ConnectionInfoEvent struct {
|
||||||
|
Event string `json:"event"`
|
||||||
|
Channel Channel `json:"channel"`
|
||||||
|
ConnCount string `json:"connCount"`
|
||||||
|
ConnId string `json:"connId"`
|
||||||
|
}
|
||||||
|
|
|
@ -849,6 +849,46 @@ func TestWebSocketEvent_IsValid(t *testing.T) {
|
||||||
|
|
||||||
assert.ErrorContains(t, opEvent.IsValid(), "unexpected event type")
|
assert.ErrorContains(t, opEvent.IsValid(), "unexpected event type")
|
||||||
})
|
})
|
||||||
|
|
||||||
|
t.Run("conn count info", func(t *testing.T) {
|
||||||
|
input := `{
|
||||||
|
"event":"channel-conn-count",
|
||||||
|
"channel":"orders",
|
||||||
|
"connCount": "2",
|
||||||
|
"connId":"abcd1234"
|
||||||
|
}`
|
||||||
|
res, err := parseWebSocketEvent([]byte(input))
|
||||||
|
assert.NoError(t, err)
|
||||||
|
opEvent, ok := res.(*WebSocketEvent)
|
||||||
|
assert.True(t, ok)
|
||||||
|
assert.Equal(t, WebSocketEvent{
|
||||||
|
Event: "channel-conn-count",
|
||||||
|
Channel: "orders",
|
||||||
|
ConnCount: "2",
|
||||||
|
}, *opEvent)
|
||||||
|
|
||||||
|
assert.NoError(t, opEvent.IsValid())
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("conn count error", func(t *testing.T) {
|
||||||
|
input := `{
|
||||||
|
"event": "channel-conn-count-error",
|
||||||
|
"channel": "orders",
|
||||||
|
"connCount": "20",
|
||||||
|
"connId":"a4d3ae55"
|
||||||
|
}`
|
||||||
|
res, err := parseWebSocketEvent([]byte(input))
|
||||||
|
assert.NoError(t, err)
|
||||||
|
opEvent, ok := res.(*WebSocketEvent)
|
||||||
|
assert.True(t, ok)
|
||||||
|
assert.Equal(t, WebSocketEvent{
|
||||||
|
Event: "channel-conn-count-error",
|
||||||
|
Channel: "orders",
|
||||||
|
ConnCount: "20",
|
||||||
|
}, *opEvent)
|
||||||
|
|
||||||
|
assert.ErrorContains(t, opEvent.IsValid(), "rate limit")
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestOrderTradeEvent(t *testing.T) {
|
func TestOrderTradeEvent(t *testing.T) {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user