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 } } }