60 lines
1.0 KiB
Go
60 lines
1.0 KiB
Go
|
package statsapi
|
||
|
|
||
|
import (
|
||
|
"net/url"
|
||
|
"time"
|
||
|
|
||
|
"github.com/gorilla/websocket"
|
||
|
)
|
||
|
|
||
|
type Push struct {
|
||
|
UpdateId string
|
||
|
}
|
||
|
|
||
|
type GamedayWebsocket struct {
|
||
|
baseURL url.URL
|
||
|
*websocket.Conn
|
||
|
}
|
||
|
|
||
|
func NewGamedayWebsocket(gamePk string) (GamedayWebsocket, error) {
|
||
|
ws := GamedayWebsocket{
|
||
|
baseURL: url.URL{
|
||
|
Scheme: "wss",
|
||
|
Host: "ws.statsapi.mlb.com",
|
||
|
},
|
||
|
}
|
||
|
|
||
|
err := ws.init(gamePk)
|
||
|
return ws, err
|
||
|
}
|
||
|
|
||
|
func (g *GamedayWebsocket) init(gamePk string) error {
|
||
|
endpoint := url.URL{
|
||
|
Path: "api/v1/game/push/subscribe/gameday/" + gamePk,
|
||
|
}
|
||
|
|
||
|
url := g.baseURL.ResolveReference(&endpoint)
|
||
|
conn, _, err := websocket.DefaultDialer.Dial(url.String(), nil)
|
||
|
|
||
|
g.Conn = conn
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
func (g *GamedayWebsocket) SendKeepAlive() error {
|
||
|
msg := []byte("Gameday5")
|
||
|
err := g.Conn.WriteMessage(websocket.TextMessage, msg)
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
func (g *GamedayWebsocket) KeepAlive(interval time.Duration, ch chan<- error) {
|
||
|
ticker := time.NewTicker(interval)
|
||
|
defer ticker.Stop()
|
||
|
|
||
|
for range ticker.C {
|
||
|
err := g.SendKeepAlive()
|
||
|
if err != nil {
|
||
|
ch <- err
|
||
|
}
|
||
|
}
|
||
|
}
|