Websockets now receive msgs
This commit is contained in:
parent
52f00b341d
commit
20b4f42e94
27
cmd/watcher/main.go
Normal file
27
cmd/watcher/main.go
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/kcotugno/tacitus"
|
||||||
|
"github.com/kcotugno/tacitus/websocket"
|
||||||
|
|
||||||
|
|
||||||
|
"log"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
c := websocket.NewClient()
|
||||||
|
err := c.Open()
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
log.Print(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
req := tacitus.Request{Type: tacitus.Subscribe,
|
||||||
|
ProductIds: []string{"ETH-USD"}}
|
||||||
|
|
||||||
|
time.Sleep(2 * time.Second)
|
||||||
|
c.Send(req)
|
||||||
|
|
||||||
|
time.Sleep(30 * time.Second)
|
||||||
|
}
|
11
request.go
Normal file
11
request.go
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
package tacitus
|
||||||
|
|
||||||
|
const Subscribe = RequestType("subscribe")
|
||||||
|
const Unsubscribe = RequestType("unsubscribe")
|
||||||
|
|
||||||
|
type RequestType string
|
||||||
|
|
||||||
|
type Request struct {
|
||||||
|
Type RequestType `json:"type"`
|
||||||
|
ProductIds []string `json:"product_ids"`
|
||||||
|
}
|
@ -1,43 +1,65 @@
|
|||||||
package websocket
|
package websocket
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"github.com/kcotugno/tacitus"
|
||||||
|
|
||||||
"github.com/gorilla/websocket"
|
"github.com/gorilla/websocket"
|
||||||
|
|
||||||
|
"log"
|
||||||
)
|
)
|
||||||
|
|
||||||
const ENDPOINT = "wss://ws-feed.gdax.com"
|
const ENDPOINT = "wss://ws-feed.gdax.com"
|
||||||
|
|
||||||
type Client struct {
|
type Client struct {
|
||||||
Disconnect chan int
|
Disconnect chan int
|
||||||
|
Error chan error
|
||||||
|
|
||||||
|
writer chan tacitus.Request
|
||||||
conn *websocket.Conn
|
conn *websocket.Conn
|
||||||
|
|
||||||
|
connect bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewClient() *Client {
|
func NewClient() *Client {
|
||||||
c := Client{}
|
c := Client{}
|
||||||
c.writer = make(chan string)
|
c.writer = make(chan tacitus.Request)
|
||||||
|
|
||||||
return &c
|
return &c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Client) Open() error {
|
func (c *Client) Open() error {
|
||||||
c.conn, _, err := websocket.Dial(ENDPOINT, nil)
|
var err error
|
||||||
|
|
||||||
|
c.conn, _, err = websocket.DefaultDialer.Dial(ENDPOINT, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return erro
|
return err
|
||||||
}
|
}
|
||||||
|
c.connect = true
|
||||||
|
|
||||||
go func () {
|
go func () {
|
||||||
var buf []byte
|
|
||||||
for true {
|
for true {
|
||||||
_, buf, _ = c.conn.ReadMessage()
|
_, buf, _ := c.conn.ReadMessage()
|
||||||
log.Write(string(bug))
|
log.Print(string(buf))
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
go func () {
|
go func () {
|
||||||
select {
|
for true {
|
||||||
case message <- c.writer:
|
select {
|
||||||
|
case msg := <- c.writer:
|
||||||
|
err := c.conn.WriteJSON(msg)
|
||||||
|
if err != nil && c.Error != nil {
|
||||||
|
c.Error <- err
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *Client) Send(msg tacitus.Request) {
|
||||||
|
if c.connect {
|
||||||
|
c.writer <- msg
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user