forked from hirokisan/bybit
-
Notifications
You must be signed in to change notification settings - Fork 0
/
v5_ws_private_order.go
126 lines (117 loc) · 4.27 KB
/
v5_ws_private_order.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
package bybit
import (
"encoding/json"
"errors"
"github.com/gorilla/websocket"
)
// SubscribeOrder :
func (s *V5WebsocketPrivateService) SubscribeOrder(
f func(V5WebsocketPrivateOrderResponse) error,
) (func() error, error) {
key := V5WebsocketPrivateParamKey{
Topic: V5WebsocketPrivateTopicOrder,
}
if err := s.addParamOrderFunc(key, f); err != nil {
return nil, err
}
param := struct {
Op string `json:"op"`
Args []interface{} `json:"args"`
}{
Op: "subscribe",
Args: []interface{}{V5WebsocketPrivateTopicOrder},
}
buf, err := json.Marshal(param)
if err != nil {
return nil, err
}
if err := s.writeMessage(websocket.TextMessage, buf); err != nil {
return nil, err
}
return func() error {
param := struct {
Op string `json:"op"`
Args []interface{} `json:"args"`
}{
Op: "unsubscribe",
Args: []interface{}{V5WebsocketPrivateTopicOrder},
}
buf, err := json.Marshal(param)
if err != nil {
return err
}
if err := s.writeMessage(websocket.TextMessage, []byte(buf)); err != nil {
return err
}
s.removeParamOrderFunc(key)
return nil
}, nil
}
// V5WebsocketPrivateOrderResponse :
type V5WebsocketPrivateOrderResponse struct {
ID string `json:"id"`
Topic V5WebsocketPrivateTopic `json:"topic"`
CreationTime int64 `json:"creationTime"`
Data []V5WebsocketPrivateOrderData `json:"data"`
}
// V5WebsocketPrivateOrderData :
type V5WebsocketPrivateOrderData struct {
AvgPrice string `json:"avgPrice"`
BlockTradeID string `json:"blockTradeId"`
CancelType string `json:"cancelType"`
Category string `json:"category"`
CloseOnTrigger bool `json:"closeOnTrigger"`
CreatedTime string `json:"createdTime"`
CumExecFee string `json:"cumExecFee"`
CumExecQty string `json:"cumExecQty"`
CumExecValue string `json:"cumExecValue"`
LeavesQty string `json:"leavesQty"`
LeavesValue string `json:"leavesValue"`
OrderID string `json:"orderId"`
OrderIv string `json:"orderIv"`
IsLeverage string `json:"isLeverage"`
LastPriceOnCreated string `json:"lastPriceOnCreated"`
OrderStatus OrderStatus `json:"orderStatus"`
OrderLinkID string `json:"orderLinkId"`
OrderType OrderType `json:"orderType"`
PositionIdx int `json:"positionIdx"`
Price string `json:"price"`
Qty string `json:"qty"`
ReduceOnly bool `json:"reduceOnly"`
RejectReason string `json:"rejectReason"`
Side Side `json:"side"`
SlTriggerBy TriggerBy `json:"slTriggerBy"`
StopLoss string `json:"stopLoss"`
StopOrderType string `json:"stopOrderType"`
Symbol SymbolV5 `json:"symbol"`
TakeProfit string `json:"takeProfit"`
TimeInForce TimeInForce `json:"timeInForce"`
TpTriggerBy TriggerBy `json:"tpTriggerBy"`
TriggerBy TriggerBy `json:"triggerBy"`
TriggerDirection TriggerDirection `json:"triggerDirection"`
TriggerPrice string `json:"triggerPrice"`
UpdatedTime string `json:"updatedTime"`
}
// Key :
func (r *V5WebsocketPrivateOrderResponse) Key() V5WebsocketPrivateParamKey {
return V5WebsocketPrivateParamKey{
Topic: r.Topic,
}
}
// addParamOrderFunc :
func (s *V5WebsocketPrivateService) addParamOrderFunc(param V5WebsocketPrivateParamKey, f func(V5WebsocketPrivateOrderResponse) error) error {
if _, exist := s.paramOrderMap.Get(param); exist {
return errors.New("already registered for this param")
}
s.paramOrderMap.Add(param, f)
return nil
}
// removeParamOrderFunc :
func (s *V5WebsocketPrivateService) removeParamOrderFunc(key V5WebsocketPrivateParamKey) {
s.paramOrderMap.Remove(key)
}
// retrieveOrderFunc :
func (s *V5WebsocketPrivateService) retrieveOrderFunc(key V5WebsocketPrivateParamKey) (func(V5WebsocketPrivateOrderResponse) error, bool) {
f, exist := s.paramOrderMap.Get(key)
return f, exist
}