Advertisement
den4ik2003

Untitled

Apr 16th, 2024
532
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 2.21 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4.     "bytes"
  5.     "compress/gzip"
  6.     "fmt"
  7.     "io/ioutil"
  8.     "log"
  9.     "net/http"
  10.     "time"
  11.  
  12.     "github.com/gorilla/websocket"
  13. )
  14.  
  15. const (
  16.     path    = "wss://open-api-ws.bingx.com/market" //  
  17.     channel = "{"id":"e745cd6d-d0f6-4a70-8d5a-043e4c741b40","reqType": "sub","dataType":"BTC-USDT@kline_1min"}" //
  18. )
  19.  
  20. var receivedMessage string
  21. var conn *websocket.Conn
  22.  
  23. func main() {
  24.     interrupt := make(chan struct{})
  25.  
  26.     header := http.Header{}
  27.     header.Add("Accept-Encoding", "gzip")
  28.  
  29.     conn, _, err := websocket.DefaultDialer.Dial(path, header)
  30.     if err != nil {
  31.         log.Fatal("WebSocket connection error:", err)
  32.     }
  33.     defer conn.Close()
  34.  
  35.     err = conn.WriteMessage(websocket.TextMessage, []byte(channel))
  36.     if err != nil {
  37.         log.Fatal("WebSocket write error:", err)
  38.     }
  39.  
  40.     go func() {
  41.         for {
  42.             messageType, message, err := conn.ReadMessage()
  43.             if err != nil {
  44.                 log.Println("WebSocket read error:", err)
  45.                 close(interrupt)
  46.                 return
  47.             }
  48.  
  49.             handleMessage(messageType, message)
  50.         }
  51.     }()
  52.  
  53.     go func() {
  54.         ticker := time.NewTicker(5 * time.Second)
  55.         defer ticker.Stop()
  56.  
  57.         for {
  58.             select {
  59.             case <-ticker.C:
  60.                 err := conn.WriteMessage(websocket.TextMessage, []byte("Ping"))
  61.                 if err != nil {
  62.                     log.Println("WebSocket write error:", err)
  63.                 }
  64.             case <-interrupt:
  65.                 return
  66.             }
  67.         }
  68.     }()
  69.  
  70.     <-interrupt
  71. }
  72.  
  73. func handleMessage(messageType int, message []byte) {
  74.     if messageType == websocket.TextMessage {
  75.         //
  76.         fmt.Println(string(message))
  77.     } else if messageType == websocket.BinaryMessage {
  78.         //
  79.         decodedMsg, err := decodeGzip(message)
  80.         if err != nil {
  81.             log.Println("WebSocket decode error:", err)
  82.             return
  83.         }
  84.         fmt.Println(decodedMsg)
  85.         if decodedMsg == "Ping" {
  86.             err = conn.WriteMessage(websocket.TextMessage, []byte("Pong"))
  87.             if err != nil {
  88.                 log.Println("WebSocket write error:", err)
  89.                 return
  90.             }
  91.             fmt.Println("Pong")
  92.         }
  93.         receivedMessage = decodedMsg
  94.     }
  95. }
  96.  
  97. func decodeGzip(data []byte) (string, error) {
  98.     reader, err := gzip.NewReader(bytes.NewReader(data))
  99.     if err != nil {
  100.         return "", err
  101.     }
  102.     defer reader.Close()
  103.  
  104.     decodedMsg, err := ioutil.ReadAll(reader)
  105.     if err != nil {
  106.         return "", err
  107.     }
  108.  
  109.     return string(decodedMsg), nil
  110. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement