/
websockets.go
58 lines (42 loc) · 1.02 KB
/
websockets.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
/*
Convenience methods for dealing with a websocket server
*/
package web
import (
"log"
"net/http"
"github.com/gorilla/websocket"
)
/*
Listens to text responses over a websocket and
passes them to a channel.
Arguments:
- url e.g. wss://live.stellar.org:9001
- body e.g. `{ "command": "subscribe", "streams": [ "transactions" ] }`
*/
func ListenToSocket(url, subscribeBody, unsubscribeBody string, c chan []byte, quit chan bool) {
var defaultDialer *websocket.Dialer
var header http.Header
conn, _, err := defaultDialer.Dial(url, header)
if err != nil { panic(err) }
// log.Println("Connected to " + url + " websocket...")
conn.WriteMessage(websocket.TextMessage, []byte(subscribeBody))
go func() {
for {
_, p, err := conn.ReadMessage()
if err != nil {
log.Println("Websocket error:")
log.Println(err.Error())
close(c)
return
}
c <- p
}
}()
for {
<- quit
log.Println("Unsubscribing...")
conn.WriteMessage(websocket.TextMessage, []byte(unsubscribeBody))
close(c)
}
}