/
ws_market_client.go
138 lines (122 loc) · 4.29 KB
/
ws_market_client.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
package api
import (
"encoding/json"
"fmt"
"github.com/gostudys/huobi_contract_golang/src/config"
"github.com/gostudys/huobi_contract_golang/src/ws/request"
"github.com/gostudys/huobi_contract_golang/src/ws/response"
"reflect"
)
type WSMarketClient struct {
WebSocketOp
}
func (wsMk *WSMarketClient) Init(host string, callback closeChanCallback) *WSMarketClient {
if host == "" {
host = config.LINEAR_SWAP_DEFAULT_HOST
}
wsMk.open("/linear-swap-ws", host, "", "", callback)
return wsMk
}
/**
【通用】订阅KLine 数据
*/
type OnSubKLineResponse func(*response.SubKLineResponse)
type OnReqKLineResponse func(*response.ReqKLineResponse)
func (wsMk *WSMarketClient) SubKLine(contractCode string, period string, callbackFun OnSubKLineResponse, id string) {
if id == "" {
id = config.DEFAULT_ID
}
ch := fmt.Sprintf("market.%s.kline.%s", contractCode, period)
subData := request.WSSubData{Sub: ch, Id: id}
data, _ := json.Marshal(subData)
wsMk.sub(data, ch, callbackFun, reflect.TypeOf(response.SubKLineResponse{}))
}
/**
【通用】请求 KLine 数据
*/
func (wsMk *WSMarketClient) ReqKLine(contractCode string, period string, callbackFun OnReqKLineResponse, from int64, to int64, id string) {
if id == "" {
id = config.DEFAULT_ID
}
ch := fmt.Sprintf("market.%s.kline.%s", contractCode, period)
subData := request.WSReqData{Req: ch, From: from, To: to, Id: id}
data, _ := json.Marshal(subData)
wsMk.req(data, ch, callbackFun, reflect.TypeOf(response.ReqKLineResponse{}))
}
/**
【通用】订阅 Market Depth 数据
*/
type OnSubDepthResponse func(*response.SubDepthResponse)
func (wsMk *WSMarketClient) SubDepth(contractCode string, fcType string, callbackFun OnSubDepthResponse, id string) {
if id == "" {
id = config.DEFAULT_ID
}
ch := fmt.Sprintf("market.%s.depth.%s", contractCode, fcType)
subData := request.WSSubData{Sub: ch, Id: id}
data, _ := json.Marshal(subData)
wsMk.sub(data, ch, callbackFun, reflect.TypeOf(response.SubDepthResponse{}))
}
/**
【通用】订阅Market Depth增量数据
*/
func (wsMk *WSMarketClient) SubIncrementalDepth(contractCode string, size string, callbackFun OnSubDepthResponse, id string) {
if id == "" {
id = config.DEFAULT_ID
}
ch := fmt.Sprintf("market.%s.depth.size_%s.high_freq", contractCode, size)
subData := request.WSSubData{Sub: ch, Id: id}
data, _ := json.Marshal(subData)
wsMk.sub(data, ch, callbackFun, reflect.TypeOf(response.SubDepthResponse{}))
}
/**
【通用】订阅 Market Detail 数据
*/
type OnSubDetailResponse func(*response.SubKLineResponse)
func (wsMk *WSMarketClient) SubDetail(contractCode string, callbackFun OnSubDetailResponse, id string) {
if id == "" {
id = config.DEFAULT_ID
}
ch := fmt.Sprintf("market.%s.detail", contractCode)
subData := request.WSSubData{Sub: ch, Id: id}
data, _ := json.Marshal(subData)
wsMk.sub(data, ch, callbackFun, reflect.TypeOf(response.SubKLineResponse{}))
}
/**
【通用】订阅买一卖一逐笔行情推送
*/
type OnSubBBOResponse func(*response.SubBBOResponse)
func (wsMk *WSMarketClient) SubBBO(contractCode string, callbackFun OnSubBBOResponse, id string) {
if id == "" {
id = config.DEFAULT_ID
}
ch := fmt.Sprintf("market.%s.bbo", contractCode)
subData := request.WSSubData{Sub: ch, Id: id}
data, _ := json.Marshal(subData)
wsMk.sub(data, ch, callbackFun, reflect.TypeOf(response.SubBBOResponse{}))
}
type OnSubTradeDetailResponse func(*response.SubTradeDetailResponse)
type OnReqTradeDetailResponse func(*response.ReqTradeDetailResponse)
/**
【通用】订阅 Trade Detail 数据
*/
func (wsMk *WSMarketClient) SubTradeDetail(contractCode string, callbackFun OnSubTradeDetailResponse, id string) {
if id == "" {
id = config.DEFAULT_ID
}
ch := fmt.Sprintf("market.%s.trade.detail", contractCode)
subData := request.WSSubData{Sub: ch, Id: id}
data, _ := json.Marshal(subData)
wsMk.sub(data, ch, callbackFun, reflect.TypeOf(response.SubTradeDetailResponse{}))
}
/**
【通用】请求 Trade Detail 数据
*/
func (wsMk *WSMarketClient) ReqTradeDetail(contractCode string, callbackFun OnReqTradeDetailResponse, id string) {
if id == "" {
id = config.DEFAULT_ID
}
ch := fmt.Sprintf("market.%s.trade.detail", contractCode)
subData := request.WSReqData{Req: ch, Id: id}
data, _ := json.Marshal(subData)
wsMk.req(data, ch, callbackFun, reflect.TypeOf(response.ReqTradeDetailResponse{}))
}