Files
exchange-monitor-go/test_dydx_ping.go
T

77 lines
1.5 KiB
Go

// +build ignore
package main
import (
"encoding/json"
"fmt"
"log"
"net/url"
"time"
"github.com/gorilla/websocket"
)
func main() {
u := url.URL{Scheme: "wss", Host: "indexer.dydx.trade", Path: "/v4/ws"}
log.Printf("Connecting to %s", u.String())
c, _, err := websocket.DefaultDialer.Dial(u.String(), nil)
if err != nil {
log.Fatal("dial:", err)
}
defer c.Close()
done := make(chan struct{})
go func() {
defer close(done)
for {
_, message, err := c.ReadMessage()
if err != nil {
log.Println("read:", err)
return
}
log.Printf("recv: %s", string(message))
}
}()
// Subscribe
sub := map[string]string{"type": "subscribe", "channel": "v4_markets"}
subData, _ := json.Marshal(sub)
c.WriteMessage(websocket.TextMessage, subData)
log.Printf("sent sub: %s", string(subData))
// Try pings
for i := 0; i < 5; i++ {
time.Sleep(10 * time.Second)
// Try JSON ping
ping := map[string]string{"type": "ping"}
pingData, _ := json.Marshal(ping)
err := c.WriteMessage(websocket.TextMessage, pingData)
if err != nil {
log.Printf("JSON ping error: %v", err)
} else {
log.Printf("sent JSON ping: %s", string(pingData))
}
// Try raw WS ping frame
err = c.WriteMessage(websocket.PingMessage, []byte("ping"))
if err != nil {
log.Printf("WS ping error: %v", err)
} else {
log.Printf("sent WS ping frame")
}
}
time.Sleep(30 * time.Second)
fmt.Println("Done - checking if still connected")
select {
case <-done:
fmt.Println("Connection closed")
default:
fmt.Println("Still connected!")
}
}