-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpush.go
125 lines (94 loc) · 2.42 KB
/
push.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
package goPoloniex
import (
"fmt"
"gopkg.in/jcelliott/turnpike.v2"
"strconv"
)
const (
URL = "wss://api.poloniex.com"
REALM = "realm1"
)
type Ticker struct {
Pair string
Last float64
LowestAsk float64
HighestBid float64
PercentChange float64
BaseVolume float64
QuoteVolume float64
IsFrozen float64
DayHigh float64
DayLow float64
}
type PushClient struct {
WSClient *turnpike.Client
}
func NewPushClient() PushClient {
wampClient, err := turnpike.NewWebsocketClient(turnpike.JSON, URL, nil, nil)
if err != nil {
fmt.Errorf("Error creating turnpike websocket client")
}
_, err = wampClient.JoinRealm(REALM, nil)
if err != nil {
fmt.Errorf("Error joining realm")
}
return PushClient{
wampClient,
}
}
func (c *PushClient) SubscribeTicker(callback func(args []interface{}, kwargs map[string]interface{})) error {
err := c.WSClient.Subscribe("ticker", nil, callback)
if err != nil {
return err
}
return nil
}
func (c *PushClient) SubscribeOrderBookTrades(currencyPair string, callback func(args []interface{}, kwargs map[string]interface{})) error {
err := c.WSClient.Subscribe(currencyPair, nil, callback)
if err != nil {
return err
}
return nil
}
func (c *PushClient) SubscribeTrollbox(callback func(args []interface{}, kwargs map[string]interface{})) error {
err := c.WSClient.Subscribe("trollbox", nil, callback)
if err != nil {
return err
}
return nil
}
/* Channel API */
func (c *PushClient) ChannelTicker(dataChannel chan Ticker) error {
err := c.WSClient.Subscribe("ticker", nil, func(args []interface{}, kwargs map[string]interface{}) {
dataChannel <- parseTicker(args)
})
if err != nil {
return err
}
return nil
}
func parseTicker(args []interface{}) Ticker {
pair := args[0].(string)
last, _ := strconv.ParseFloat(args[1].(string), 64)
lowestAsk, _ := strconv.ParseFloat(args[2].(string), 64)
highestBid, _ := strconv.ParseFloat(args[3].(string), 64)
percentChange, _ := strconv.ParseFloat(args[4].(string), 64)
baseVolume, _ := strconv.ParseFloat(args[5].(string), 64)
quoteVolume, _ := strconv.ParseFloat(args[6].(string), 64)
isFrozen := args[7].(float64)
dayHigh, _ := strconv.ParseFloat(args[8].(string), 64)
dayLow, _ := strconv.ParseFloat(args[9].(string), 64)
t := Ticker{
pair,
last,
lowestAsk,
highestBid,
percentChange,
baseVolume,
quoteVolume,
isFrozen,
dayHigh,
dayLow,
}
return t
}