mirror of
https://github.com/d0zingcat/gocryptotrader.git
synced 2026-05-13 23:16:45 +00:00
236 lines
3.8 KiB
Go
236 lines
3.8 KiB
Go
package main
|
|
|
|
import (
|
|
"log"
|
|
"net/http"
|
|
"time"
|
|
|
|
"github.com/gorilla/websocket"
|
|
"github.com/thrasher-/gocryptotrader/common"
|
|
"github.com/thrasher-/gocryptotrader/config"
|
|
)
|
|
|
|
var (
|
|
WSConn *websocket.Conn
|
|
)
|
|
|
|
type WebsocketEvent struct {
|
|
Event string `json:"event"`
|
|
Data interface{} `json:"data"`
|
|
Exchange string `json:"exchange,omitempty"`
|
|
}
|
|
|
|
type WebsocketAuth struct {
|
|
Username string `json:"username"`
|
|
Password string `json:"password"`
|
|
}
|
|
|
|
type WebsocketEventResponse struct {
|
|
Event string `json:"event"`
|
|
Data interface{} `json:"data"`
|
|
Error string `json:"error"`
|
|
}
|
|
|
|
type WebsocketTickerRequest struct {
|
|
Exchange string `json:"exchangeName"`
|
|
Currency string `json:"currency"`
|
|
}
|
|
|
|
func SendWebsocketAuth(username, password string) error {
|
|
pwHash := common.HexEncodeToString(common.GetSHA256([]byte(password)))
|
|
req := WebsocketEvent{
|
|
Event: "auth",
|
|
Data: WebsocketAuth{
|
|
Username: username,
|
|
Password: pwHash,
|
|
},
|
|
}
|
|
|
|
return SendWebsocketMsg(req)
|
|
}
|
|
|
|
func SendWebsocketMsg(data interface{}) error {
|
|
return WSConn.WriteJSON(data)
|
|
}
|
|
|
|
func GetWebsocketTicker(currency string) error {
|
|
wsevt := WebsocketEvent{
|
|
Event: "ticker",
|
|
Data: currency,
|
|
}
|
|
|
|
return SendWebsocketMsg(wsevt)
|
|
}
|
|
|
|
func main() {
|
|
var Dialer websocket.Dialer
|
|
var err error
|
|
|
|
WSConn, _, err = Dialer.Dial("ws://localhost:9050/ws", http.Header{})
|
|
|
|
if err != nil {
|
|
log.Println("Unable to connect to websocket server")
|
|
return
|
|
}
|
|
|
|
log.Println("Connected to websocket!")
|
|
log.Println("Authenticating..")
|
|
SendWebsocketAuth("blah", "blah")
|
|
|
|
var wsResp WebsocketEventResponse
|
|
err = WSConn.ReadJSON(&wsResp)
|
|
if err != nil {
|
|
log.Println(err)
|
|
return
|
|
}
|
|
|
|
if wsResp.Error != "" {
|
|
log.Fatal(wsResp.Error)
|
|
}
|
|
|
|
log.Println("Authenticated successfully")
|
|
log.Println("Getting config..")
|
|
|
|
req := WebsocketEvent{
|
|
Event: "GetConfig",
|
|
}
|
|
|
|
err = WSConn.WriteJSON(req)
|
|
if err != nil {
|
|
log.Println(err)
|
|
return
|
|
}
|
|
|
|
err = WSConn.ReadJSON(&wsResp)
|
|
if err != nil {
|
|
log.Println(err)
|
|
return
|
|
}
|
|
|
|
if wsResp.Error != "" {
|
|
log.Fatal(wsResp.Error)
|
|
}
|
|
|
|
log.Printf("Fetched config.")
|
|
|
|
dataJSON, err := common.JSONEncode(&wsResp.Data)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
var resultCfg config.Config
|
|
err = common.JSONDecode(dataJSON, &resultCfg)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
resultCfg.Name = "TEST"
|
|
|
|
req = WebsocketEvent{
|
|
Event: "SaveConfig",
|
|
Data: resultCfg,
|
|
}
|
|
|
|
log.Println("Saving config..")
|
|
err = WSConn.WriteJSON(req)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
err = WSConn.ReadJSON(&wsResp)
|
|
if err != nil {
|
|
log.Println(err)
|
|
return
|
|
}
|
|
|
|
if wsResp.Error != "" {
|
|
log.Fatal(wsResp.Error)
|
|
}
|
|
|
|
log.Println("Saved config!")
|
|
log.Println("Getting account info..")
|
|
|
|
req = WebsocketEvent{
|
|
Event: "GetAccountInfo",
|
|
}
|
|
|
|
err = WSConn.WriteJSON(req)
|
|
if err != nil {
|
|
log.Println(err)
|
|
return
|
|
}
|
|
|
|
err = WSConn.ReadJSON(&wsResp)
|
|
if err != nil {
|
|
log.Println(err)
|
|
return
|
|
}
|
|
|
|
if wsResp.Error != "" {
|
|
log.Fatal(wsResp.Error)
|
|
}
|
|
|
|
log.Println("Getting tickers..")
|
|
|
|
req = WebsocketEvent{
|
|
Event: "GetTickers",
|
|
}
|
|
|
|
err = WSConn.WriteJSON(req)
|
|
if err != nil {
|
|
log.Println(err)
|
|
return
|
|
}
|
|
|
|
err = WSConn.ReadJSON(&wsResp)
|
|
if err != nil {
|
|
log.Println(err)
|
|
return
|
|
}
|
|
|
|
if wsResp.Error != "" {
|
|
log.Fatal(wsResp.Error)
|
|
}
|
|
|
|
log.Println("Getting specific ticker..")
|
|
|
|
var tickReq WebsocketTickerRequest
|
|
tickReq.Currency = "LTCUSD"
|
|
tickReq.Exchange = "Bitfinex"
|
|
|
|
req = WebsocketEvent{
|
|
Event: "GetTicker",
|
|
Data: tickReq,
|
|
}
|
|
|
|
err = WSConn.WriteJSON(req)
|
|
if err != nil {
|
|
log.Println(err)
|
|
return
|
|
}
|
|
|
|
err = WSConn.ReadJSON(&wsResp)
|
|
if err != nil {
|
|
log.Println(err)
|
|
return
|
|
}
|
|
|
|
if wsResp.Error != "" {
|
|
log.Fatal(wsResp.Error)
|
|
}
|
|
|
|
log.Println(wsResp)
|
|
|
|
for {
|
|
msgType, resp, err := WSConn.ReadMessage()
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
log.Println(msgType)
|
|
log.Println(string(resp))
|
|
}
|
|
time.Sleep(time.Second * 10)
|
|
WSConn.Close()
|
|
}
|