mirror of
https://github.com/d0zingcat/gocryptotrader.git
synced 2026-06-09 07:26:48 +00:00
Websocket update increasing exchange coverage and bug fixes (#233)
Websocket update increasing exchange coverage and bug fixes
This commit is contained in:
committed by
Adrian Gallagher
parent
b62a9c76b1
commit
41415ca3b9
@@ -116,7 +116,10 @@ func (b *Bitmex) SetDefaults() {
|
||||
b.Enabled = false
|
||||
b.Verbose = false
|
||||
b.RESTPollingDelay = 10
|
||||
b.APIWithdrawPermissions = exchange.AutoWithdrawCryptoWithAPIPermission | exchange.WithdrawCryptoWithEmail | exchange.WithdrawCryptoWith2FA | exchange.NoFiatWithdrawals
|
||||
b.APIWithdrawPermissions = exchange.AutoWithdrawCryptoWithAPIPermission |
|
||||
exchange.WithdrawCryptoWithEmail |
|
||||
exchange.WithdrawCryptoWith2FA |
|
||||
exchange.NoFiatWithdrawals
|
||||
b.RequestCurrencyPairFormat.Delimiter = ""
|
||||
b.RequestCurrencyPairFormat.Uppercase = true
|
||||
b.ConfigCurrencyPairFormat.Delimiter = ""
|
||||
@@ -130,6 +133,8 @@ func (b *Bitmex) SetDefaults() {
|
||||
b.APIUrl = b.APIUrlDefault
|
||||
b.SupportsAutoPairUpdating = true
|
||||
b.WebsocketInit()
|
||||
b.Websocket.Functionality = exchange.WebsocketTradeDataSupported |
|
||||
exchange.WebsocketOrderbookSupported
|
||||
}
|
||||
|
||||
// Setup takes in the supplied exchange configuration details and sets params
|
||||
|
||||
@@ -104,7 +104,6 @@ func (b *Bitmex) WsConnector() error {
|
||||
}
|
||||
|
||||
go b.wsHandleIncomingData()
|
||||
go b.wsReadData()
|
||||
|
||||
err = b.websocketSubscribe()
|
||||
if err != nil {
|
||||
@@ -125,7 +124,21 @@ func (b *Bitmex) WsConnector() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (b *Bitmex) wsReadData() {
|
||||
func (b *Bitmex) wsReadData() (exchange.WebsocketResponse, error) {
|
||||
_, resp, err := b.WebsocketConn.ReadMessage()
|
||||
if err != nil {
|
||||
return exchange.WebsocketResponse{}, err
|
||||
}
|
||||
|
||||
b.Websocket.TrafficAlert <- struct{}{}
|
||||
|
||||
return exchange.WebsocketResponse{
|
||||
Raw: resp,
|
||||
}, nil
|
||||
}
|
||||
|
||||
// wsHandleIncomingData services incoming data from the websocket connection
|
||||
func (b *Bitmex) wsHandleIncomingData() {
|
||||
b.Websocket.Wg.Add(1)
|
||||
|
||||
defer func() {
|
||||
@@ -143,33 +156,12 @@ func (b *Bitmex) wsReadData() {
|
||||
return
|
||||
|
||||
default:
|
||||
_, resp, err := b.WebsocketConn.ReadMessage()
|
||||
resp, err := b.wsReadData()
|
||||
if err != nil {
|
||||
b.Websocket.DataHandler <- fmt.Errorf("bitmex_websocket.go - websocket connection Error: %s",
|
||||
err)
|
||||
b.Websocket.DataHandler <- err
|
||||
return
|
||||
}
|
||||
|
||||
b.Websocket.TrafficAlert <- struct{}{}
|
||||
|
||||
b.Websocket.Intercomm <- exchange.WebsocketResponse{
|
||||
Raw: resp,
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// wsHandleIncomingData services incoming data from the websocket connection
|
||||
func (b *Bitmex) wsHandleIncomingData() {
|
||||
b.Websocket.Wg.Add(1)
|
||||
defer b.Websocket.Wg.Done()
|
||||
|
||||
for {
|
||||
select {
|
||||
case <-b.Websocket.ShutdownC:
|
||||
return
|
||||
|
||||
case resp := <-b.Websocket.Intercomm:
|
||||
message := string(resp.Raw)
|
||||
if common.StringContains(message, "pong") {
|
||||
pongChan <- 1
|
||||
@@ -180,20 +172,23 @@ func (b *Bitmex) wsHandleIncomingData() {
|
||||
err := b.WebsocketConn.WriteJSON("pong")
|
||||
if err != nil {
|
||||
b.Websocket.DataHandler <- err
|
||||
continue
|
||||
}
|
||||
}
|
||||
|
||||
quickCapture := make(map[string]interface{})
|
||||
err := common.JSONDecode(resp.Raw, &quickCapture)
|
||||
err = common.JSONDecode(resp.Raw, &quickCapture)
|
||||
if err != nil {
|
||||
log.Error(err)
|
||||
b.Websocket.DataHandler <- err
|
||||
continue
|
||||
}
|
||||
|
||||
var respError WebsocketErrorResponse
|
||||
if _, ok := quickCapture["status"]; ok {
|
||||
err = common.JSONDecode(resp.Raw, &respError)
|
||||
if err != nil {
|
||||
log.Error(err)
|
||||
b.Websocket.DataHandler <- err
|
||||
continue
|
||||
}
|
||||
b.Websocket.DataHandler <- errors.New(respError.Error)
|
||||
continue
|
||||
@@ -203,7 +198,8 @@ func (b *Bitmex) wsHandleIncomingData() {
|
||||
var decodedResp WebsocketSubscribeResp
|
||||
err := common.JSONDecode(resp.Raw, &decodedResp)
|
||||
if err != nil {
|
||||
log.Error(err)
|
||||
b.Websocket.DataHandler <- err
|
||||
continue
|
||||
}
|
||||
|
||||
if decodedResp.Success {
|
||||
@@ -225,7 +221,8 @@ func (b *Bitmex) wsHandleIncomingData() {
|
||||
var decodedResp WebsocketMainResponse
|
||||
err := common.JSONDecode(resp.Raw, &decodedResp)
|
||||
if err != nil {
|
||||
log.Error(err)
|
||||
b.Websocket.DataHandler <- err
|
||||
continue
|
||||
}
|
||||
|
||||
switch decodedResp.Table {
|
||||
@@ -233,20 +230,23 @@ func (b *Bitmex) wsHandleIncomingData() {
|
||||
var orderbooks OrderBookData
|
||||
err = common.JSONDecode(resp.Raw, &orderbooks)
|
||||
if err != nil {
|
||||
log.Error(err)
|
||||
b.Websocket.DataHandler <- err
|
||||
continue
|
||||
}
|
||||
|
||||
p := pair.NewCurrencyPairFromString(orderbooks.Data[0].Symbol)
|
||||
err = b.processOrderbook(orderbooks.Data, orderbooks.Action, p, "CONTRACT")
|
||||
if err != nil {
|
||||
log.Error(err)
|
||||
b.Websocket.DataHandler <- err
|
||||
continue
|
||||
}
|
||||
|
||||
case bitmexWSTrade:
|
||||
var trades TradeData
|
||||
err = common.JSONDecode(resp.Raw, &trades)
|
||||
if err != nil {
|
||||
log.Error(err)
|
||||
b.Websocket.DataHandler <- err
|
||||
continue
|
||||
}
|
||||
|
||||
if trades.Action == bitmexActionInitialData {
|
||||
@@ -256,7 +256,8 @@ func (b *Bitmex) wsHandleIncomingData() {
|
||||
for _, trade := range trades.Data {
|
||||
timestamp, err := time.Parse(time.RFC3339, trade.Timestamp)
|
||||
if err != nil {
|
||||
log.Error(err)
|
||||
b.Websocket.DataHandler <- err
|
||||
continue
|
||||
}
|
||||
|
||||
b.Websocket.DataHandler <- exchange.TradeData{
|
||||
@@ -275,7 +276,8 @@ func (b *Bitmex) wsHandleIncomingData() {
|
||||
|
||||
err = common.JSONDecode(resp.Raw, &announcement)
|
||||
if err != nil {
|
||||
log.Error(err)
|
||||
b.Websocket.DataHandler <- err
|
||||
continue
|
||||
}
|
||||
|
||||
if announcement.Action == bitmexActionInitialData {
|
||||
@@ -285,7 +287,8 @@ func (b *Bitmex) wsHandleIncomingData() {
|
||||
b.Websocket.DataHandler <- announcement.Data
|
||||
|
||||
default:
|
||||
log.Errorf("Bitmex websocket error: Table unknown - %s", decodedResp.Table)
|
||||
b.Websocket.DataHandler <- fmt.Errorf("Bitmex websocket error: Table unknown - %s",
|
||||
decodedResp.Table)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -341,7 +344,7 @@ func (b *Bitmex) processOrderbook(data []OrderBookL2, action string, currencyPai
|
||||
newOrderbook.LastUpdated = time.Now()
|
||||
newOrderbook.Pair = currencyPair
|
||||
|
||||
err := b.Websocket.Orderbook.LoadSnapshot(newOrderbook, b.GetName())
|
||||
err := b.Websocket.Orderbook.LoadSnapshot(newOrderbook, b.GetName(), false)
|
||||
if err != nil {
|
||||
return fmt.Errorf("bitmex_websocket.go process orderbook error - %s",
|
||||
err)
|
||||
|
||||
Reference in New Issue
Block a user