handle unexpected websocket closures

This commit is contained in:
filifa 2024-07-20 13:11:10 -05:00
parent 02ddfbf2b9
commit 5e471f5c2c
1 changed files with 31 additions and 5 deletions

View File

@ -23,6 +23,7 @@ import (
"strconv" "strconv"
"time" "time"
"github.com/gorilla/websocket"
"github.com/spf13/cobra" "github.com/spf13/cobra"
"scm.dairydemon.net/filifa/mlblive/cmd/internal/statsapi" "scm.dairydemon.net/filifa/mlblive/cmd/internal/statsapi"
) )
@ -50,17 +51,26 @@ func updateFeed(feedResp []byte, gamePk, ts, updateId string) ([]byte, error) {
return feedResp, err return feedResp, err
} }
func newWebsocket(gamePk string) (*statsapi.GamedayWebsocket, <-chan error, error) {
ws, err := statsapi.NewGamedayWebsocket(gamePk)
if err != nil {
return nil, nil, err
}
ch := make(chan error)
go ws.KeepAlive(10*time.Second, ch)
return &ws, ch, err
}
func subscribe(cmd *cobra.Command, args []string) { func subscribe(cmd *cobra.Command, args []string) {
pkStr := strconv.Itoa(gamePk) pkStr := strconv.Itoa(gamePk)
ws, err := statsapi.NewGamedayWebsocket(pkStr) ws, _, err := newWebsocket(pkStr)
if err != nil { if err != nil {
log.Fatal(err) log.Fatal(err)
} }
defer ws.Close() defer ws.Close()
ch := make(chan error)
go ws.KeepAlive(10*time.Second, ch)
feedResp, err := statsapi.RequestFeed(pkStr) feedResp, err := statsapi.RequestFeed(pkStr)
if err != nil { if err != nil {
log.Fatal(err) log.Fatal(err)
@ -78,7 +88,23 @@ func subscribe(cmd *cobra.Command, args []string) {
var p statsapi.Push var p statsapi.Push
err = ws.ReadJSON(&p) err = ws.ReadJSON(&p)
if err != nil { if websocket.IsUnexpectedCloseError(err) {
log.Println(err)
ws.Close()
ws, _, err = newWebsocket(pkStr)
if err != nil {
log.Fatal(err)
}
defer ws.Close()
feedResp, err = statsapi.RequestFeed(pkStr)
if err != nil {
log.Fatal(err)
}
continue
} else if err != nil {
log.Fatal(err) log.Fatal(err)
} }