From bbce5e61969851a5336d694eab17f927aa9d27fc Mon Sep 17 00:00:00 2001 From: Adrian Gallagher Date: Fri, 10 Apr 2015 21:03:09 +1000 Subject: [PATCH] Added basic Huobi Websocket support. --- huobihttp.go | 5 +++ huobiwebsocket.go | 87 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 92 insertions(+) create mode 100644 huobiwebsocket.go diff --git a/huobihttp.go b/huobihttp.go index d6be3d53..8eeb8d5f 100644 --- a/huobihttp.go +++ b/huobihttp.go @@ -70,9 +70,14 @@ func (h *HUOBI) GetFee() (float64) { func (h *HUOBI) Run() { if h.Verbose { + log.Printf("%s Websocket: %s (url: %s).\n", h.GetName(), IsEnabled(h.Websocket), HUOBI_SOCKETIO_ADDRESS) log.Printf("%s polling delay: %ds.\n", h.GetName(), h.PollingDelay) } + if h.Websocket { + go h.WebsocketClient() + } + for h.Enabled { go func() { HuobiBTC := h.GetTicker("btc") diff --git a/huobiwebsocket.go b/huobiwebsocket.go new file mode 100644 index 00000000..b63f8144 --- /dev/null +++ b/huobiwebsocket.go @@ -0,0 +1,87 @@ +package main + +import ( + "fmt" + "log" + "github.com/thrasher-/socketio" +) + +const ( + HUOBI_SOCKETIO_ADDRESS = "https://hq.huobi.com:443" + HUOBI_SOCKET_SYMBOL_LIST = "reqSymbolList" + HUOBI_SOCKET_SYMBOL_DETAIL = "reqSymbolDetail" + HUOBI_SOCKET_SUBSCRIBE = "reqMsgSubscribe" + HUOBI_SOCKET_UNSUBSCRIBE = "reqMsgUnsubscribe" + HUOBI_SOCKET_TIMELINE = "reqTimeLine" + HUOBI_SOCKET_KLINE = "reqKLine" + HUOBI_SOCKET_DEPTH = "reqMarketDepth" + HUOBI_SOCKET_DEPTH_TOP = "reqMarketDepthTop" + HUOBI_SOCKET_TRADE_DETAIL_TOP = "reqTradeDetailTop" + HUOBI_SOCKET_MARKET_DETAIL = "reqMarketDetail" +) + +var HuobiSocket *socketio.SocketIO + +type HuobiRequest struct { + Version int `json:"version"` + MsgType string `json:"msgType"` +} + +type HuobiResponse struct { + Version int `json:"version"` + MsgType string `json:"msgType"` + RequestIndex int64 `json:"requestIndex"` + RetCode int64 `json:"retCode"` + RetMessage string `json:"retMsg"` + Payload map[string]interface{} `json:"payload"` +} + +func (h *HUOBI) OnConnect(output chan socketio.Message) { + if h.Verbose { + log.Printf("%s Connected to Websocket.", h.GetName()) + } + msg := HuobiRequest{1, HUOBI_SOCKET_SYMBOL_LIST} + result, err := JSONEncode(msg) + if err != nil { + log.Println(err) + } + output <- socketio.CreateMessageEvent("request", string(result), nil) +} + +func (h *HUOBI) OnDisconnect(output chan socketio.Message) { + log.Println("Disconnected from websocket client.. Reconnecting") + h.WebsocketClient() +} + +func (h *HUOBI) OnMessage(message []byte, output chan socketio.Message) { + log.Println(string(message)) +} + +func (h *HUOBI) OnRequest(message []byte, output chan socketio.Message) { + response := HuobiResponse{} + err := JSONDecode(message, &response) + if err != nil { + log.Println(err) + } + log.Println(response) +} + +func (h *HUOBI) WebsocketClient() { + events := make(map[string]func(message []byte, output chan socketio.Message)) + events["request"] = h.OnRequest + + HuobiSocket = &socketio.SocketIO{ + OnConnect: h.OnConnect, + OnDisconnect: h.OnDisconnect, + OnMessage: h.OnMessage, + OnEvent: events, + } + + err := socketio.ConnectToSocket(HUOBI_SOCKETIO_ADDRESS, HuobiSocket) + if err != nil { + fmt.Println(err) + return + } + + log.Printf("%s Websocket client disconnected.", h.GetName()) +} \ No newline at end of file