diff --git a/dwvxhttp.go b/dwvxhttp.go index 281c5904..fb327e6a 100644 --- a/dwvxhttp.go +++ b/dwvxhttp.go @@ -1,6 +1,7 @@ package main import ( + "github.com/gorilla/websocket" "log" "time" ) @@ -24,6 +25,7 @@ type DWVX struct { EnabledPairs []string API Alphapoint DepositAddresses map[string]string + WebsocketConn *websocket.Conn } func (d *DWVX) SetDefaults() { @@ -56,10 +58,15 @@ func (d *DWVX) SetAPIKeys(userID, apiKey, apiSecret string) { func (d *DWVX) Run() { if d.Verbose { + log.Printf("%s Websocket: %s. (url: %s).\n", d.GetName(), IsEnabled(d.Websocket), DWVX_WEBSOCKET_URL) log.Printf("%s polling delay: %ds.\n", d.GetName(), d.RESTPollingDelay) log.Printf("%s %d currencies enabled: %s.\n", d.GetName(), len(d.EnabledPairs), d.EnabledPairs) } + if d.Websocket { + go d.WebsocketClient() + } + products, err := d.GetProductPairs() if err != nil { log.Printf("%s Failed to get available symbols.\n", d.GetName()) diff --git a/dwvxwebsocket.go b/dwvxwebsocket.go new file mode 100644 index 00000000..a0d304b9 --- /dev/null +++ b/dwvxwebsocket.go @@ -0,0 +1,69 @@ +package main + +import ( + "github.com/gorilla/websocket" + "log" + "net/http" +) + +const ( + DWVX_WEBSOCKET_URL = "wss://api.dwvx.com.au:8401/v1/GetTicker/" +) + +func (d *DWVX) WebsocketClient() { + for d.Enabled && d.Websocket { + var Dialer websocket.Dialer + var err error + d.WebsocketConn, _, err = Dialer.Dial(DWVX_WEBSOCKET_URL, http.Header{}) + + if err != nil { + log.Printf("%s Unable to connect to Websocket. Error: %s\n", d.Name, err) + continue + } + + if d.Verbose { + log.Printf("%s Connected to Websocket.\n", d.Name) + } + + err = d.WebsocketConn.WriteMessage(websocket.TextMessage, []byte(`{"messageType": "logon"}`)) + + if err != nil { + log.Println(err) + return + } + + for d.Enabled && d.Websocket { + msgType, resp, err := d.WebsocketConn.ReadMessage() + if err != nil { + log.Println(err) + break + } + + switch msgType { + case websocket.TextMessage: + type MsgType struct { + MessageType string `json:"messageType"` + } + + msgType := MsgType{} + err := JSONDecode(resp, &msgType) + if err != nil { + log.Println(err) + continue + } + + switch msgType.MessageType { + case "Ticker": + ticker := AlphapointWebsocketTicker{} + err = JSONDecode(resp, &ticker) + if err != nil { + log.Println(err) + continue + } + } + } + } + d.WebsocketConn.Close() + log.Printf("%s Websocket client disconnected.", d.Name) + } +}