diff --git a/bitstamphttp.go b/bitstamphttp.go index 73a042bd..e9808507 100644 --- a/bitstamphttp.go +++ b/bitstamphttp.go @@ -114,11 +114,16 @@ func (b *Bitstamp) SetAPIKeys(clientID, apiKey, apiSecret string) { func (b *Bitstamp) Run() { if b.Verbose { + log.Printf("%s Websocket: %s.", b.GetName(), IsEnabled(b.Websocket)) log.Printf("%s polling delay: %ds.\n", b.GetName(), b.PollingDelay) } b.GetBalance() + if b.Websocket { + go b.PusherClient() + } + for b.Enabled { go func() { BitstampBTC := b.GetTicker() diff --git a/bitstampwebsocket.go b/bitstampwebsocket.go new file mode 100644 index 00000000..721d7265 --- /dev/null +++ b/bitstampwebsocket.go @@ -0,0 +1,71 @@ +package main + +import ( + "github.com/toorop/go-pusher" + "log" +) + +type BitstampPusherOrderbook struct { + Asks[][] string `json:"asks"` + Bids[][] string `json:"bids"` +} +type BitstampPusherTrade struct { + Price float64 `json:"price"` + Amount float64 `json:"amount"` + ID int64 `json:"id"` +} + +const ( + BITSTAMP_PUSHER_KEY = "de504dc5763aeef9ff52" +) + +func (b *Bitstamp) PusherClient() { + pusherClient, err := pusher.NewClient(BITSTAMP_PUSHER_KEY) + if err != nil { + log.Fatalln(err) + return + } + + err = pusherClient.Subscribe("live_trades") + if err != nil { + log.Println("Subscription error : ", err) + return + } + + err = pusherClient.Subscribe("order_book") + if err != nil { + log.Println("Subscription error : ", err) + return + } + + dataChannelTrade, err := pusherClient.Bind("data") + if err != nil { + log.Println("Bind error: ", err) + return + } + tradeChannelTrade, err := pusherClient.Bind("trade") + if err != nil { + log.Println("Bind error: ", err) + return + } + + log.Printf("%s Pusher client ready.\n", b.GetName()) + + for b.Websocket { + select { + case data := <-dataChannelTrade: + result := BitstampPusherOrderbook{} + err := JSONDecode([]byte(data.Data), &result) + if err != nil { + log.Println(err) + } + case trade := <-tradeChannelTrade: + result := BitstampPusherTrade{} + err := JSONDecode([]byte(trade.Data), &result) + if err != nil { + log.Println(err) + } + log.Printf("%s Pusher trade: Price: %f Amount: %f\n", b.GetName(), result.Price, result.Amount) + } + } +} \ No newline at end of file diff --git a/config_example.json b/config_example.json index a66c7c12..9c3d20c8 100644 --- a/config_example.json +++ b/config_example.json @@ -30,7 +30,7 @@ "BaseCurrencies": "USD", "Enabled": true, "Verbose": false, - "Websocket": false, + "Websocket": true, "PollingDelay": 10 }, {