Modified Websocket ticker handling to reflect Exchange JSON changes.

This commit is contained in:
Adrian Gallagher
2015-09-30 16:56:51 +10:00
parent bf6232598f
commit cf6b0051a0

View File

@@ -6,6 +6,7 @@ import (
"log" "log"
"net/http" "net/http"
"net/url" "net/url"
"reflect"
"strconv" "strconv"
"strings" "strings"
"time" "time"
@@ -35,13 +36,13 @@ type OKCoinWebsocketFutureIndex struct {
} }
type OKCoinWebsocketTicker struct { type OKCoinWebsocketTicker struct {
Timestamp int64 `json:"timestamp,string"` Timestamp float64
Vol string `json:"vol"` Vol string
Buy float64 `json:"buy,string"` Buy float64
High float64 `json:"high,string"` High float64
Last float64 `json:"last,string"` Last float64
Low float64 `json:"low,string"` Low float64
Sell float64 `json:"sell,string"` Sell float64
} }
type OKCoinWebsocketFuturesTicker struct { type OKCoinWebsocketFuturesTicker struct {
@@ -498,12 +499,51 @@ func (o *OKCoin) WebsocketClient() {
switch true { switch true {
case StringContains(channelStr, "ticker") && !StringContains(channelStr, "future"): case StringContains(channelStr, "ticker") && !StringContains(channelStr, "future"):
tickerValues := []string{"buy", "high", "last", "low", "sell", "timestamp"}
tickerMap := data.(map[string]interface{})
ticker := OKCoinWebsocketTicker{} ticker := OKCoinWebsocketTicker{}
err = JSONDecode(dataJSON, &ticker) ticker.Vol = tickerMap["vol"].(string)
if err != nil { for _, z := range tickerValues {
log.Println(err) result := reflect.TypeOf(tickerMap[z]).String()
continue if result == "string" {
value, err := strconv.ParseFloat(tickerMap[z].(string), 64)
if err != nil {
log.Println(err)
continue
}
switch z {
case "buy":
ticker.Buy = value
case "high":
ticker.High = value
case "last":
ticker.Last = value
case "low":
ticker.Low = value
case "sell":
ticker.Sell = value
case "timestamp":
ticker.Timestamp = value
}
} else if result == "float64" {
switch z {
case "buy":
ticker.Buy = tickerMap[z].(float64)
case "high":
ticker.High = tickerMap[z].(float64)
case "last":
ticker.Last = tickerMap[z].(float64)
case "low":
ticker.Low = tickerMap[z].(float64)
case "sell":
ticker.Sell = tickerMap[z].(float64)
case "timestamp":
ticker.Timestamp = tickerMap[z].(float64)
}
}
} }
case StringContains(channelStr, "ticker") && StringContains(channelStr, "future"): case StringContains(channelStr, "ticker") && StringContains(channelStr, "future"):
ticker := OKCoinWebsocketFuturesTicker{} ticker := OKCoinWebsocketFuturesTicker{}