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  }