github.com/vmpartner/bitmex@v1.1.0/main.go (about) 1 package main 2 3 import ( 4 "fmt" 5 "github.com/vmpartner/bitmex/bitmex" 6 "github.com/vmpartner/bitmex/config" 7 "github.com/vmpartner/bitmex/rest" 8 "github.com/vmpartner/bitmex/tools" 9 "github.com/vmpartner/bitmex/websocket" 10 "strings" 11 ) 12 13 // Usage example 14 func main() { 15 16 // Load config 17 cfg := config.LoadConfig("config.json") 18 ctx := rest.MakeContext(cfg.Key, cfg.Secret, cfg.Host, cfg.Timeout) 19 20 // Get wallet 21 w, response, err := rest.GetWallet(ctx) 22 tools.CheckErr(err) 23 fmt.Printf("Status: %v, wallet amount: %v\n", response.StatusCode, w.Amount) 24 25 // Connect to WS 26 conn := websocket.Connect(cfg.Host) 27 defer conn.Close() 28 29 // Listen read WS 30 chReadFromWS := make(chan []byte, 100) 31 go websocket.ReadFromWSToChannel(conn, chReadFromWS) 32 33 // Listen write WS 34 chWriteToWS := make(chan interface{}, 100) 35 go websocket.WriteFromChannelToWS(conn, chWriteToWS) 36 37 // Authorize 38 chWriteToWS <- websocket.GetAuthMessage(cfg.Key, cfg.Secret) 39 40 // Read first response message 41 message := <-chReadFromWS 42 if !strings.Contains(string(message), "Welcome to the BitMEX") { 43 fmt.Println(string(message)) 44 panic("No welcome message") 45 } 46 47 // Read auth response success 48 message = <-chReadFromWS 49 res, err := bitmex.DecodeMessage(message) 50 tools.CheckErr(err) 51 if res.Success != true || res.Request.(map[string]interface{})["op"] != "authKey" { 52 panic("No auth response success") 53 } 54 55 // Listen websocket before subscribe 56 go func() { 57 for { 58 message := <-chReadFromWS 59 res, err := bitmex.DecodeMessage(message) 60 tools.CheckErr(err) 61 62 // Your logic here 63 fmt.Printf("%+v\n", res) 64 } 65 }() 66 67 // Subscribe 68 messageWS := websocket.Message{Op: "subscribe"} 69 messageWS.AddArgument("orderBookL2:XBTUSD") 70 messageWS.AddArgument("order") 71 messageWS.AddArgument("position") 72 chWriteToWS <- messageWS 73 74 // Loop forever 75 select {} 76 }