From 1fe327c68c90c24491bc030f9ed2a8ede222d964 Mon Sep 17 00:00:00 2001 From: filifa Date: Sat, 20 Jul 2024 17:07:58 -0500 Subject: [PATCH] refactor --- cmd/subscribe.go | 61 +++++++++++++++++++++++++++--------------------- 1 file changed, 35 insertions(+), 26 deletions(-) diff --git a/cmd/subscribe.go b/cmd/subscribe.go index 7e9bff3..b6a0202 100644 --- a/cmd/subscribe.go +++ b/cmd/subscribe.go @@ -30,21 +30,21 @@ import ( var gamePk int -func updateFeed(feedResp []byte, gamePk, ts, updateId string) ([]byte, error) { +func patch(feedResp []byte, gamePk, ts, updateId string) ([]byte, error) { diffPatchResp, err := statsapi.RequestDiffPatch(gamePk, ts, updateId) if err != nil { - return statsapi.RequestFeed(gamePk) + return feedResp, err } patches, err := diffPatchResp.ExtractPatches() if err != nil { - return statsapi.RequestFeed(gamePk) + return feedResp, err } for _, patch := range patches { feedResp, err = patch.Apply(feedResp) if err != nil { - return statsapi.RequestFeed(gamePk) + return feedResp, err } } @@ -73,6 +73,36 @@ func handleUnexpectedClose(gamePk string) (*statsapi.GamedayWebsocket, []byte, e return ws, feedResp, err } +func updateFeed(ws *statsapi.GamedayWebsocket, feedResp []byte, gamePk string) ([]byte, error) { + var feed statsapi.Feed + err := json.Unmarshal(feedResp, &feed) + if err != nil { + return nil, err + } + ts := feed.MetaData.TimeStamp + + var p statsapi.Push + err = ws.ReadJSON(&p) + if websocket.IsUnexpectedCloseError(err, statsapi.GameFinalCode, statsapi.GameUnavailableCode) { + log.Println(err) + + newWs, feedResp, err := handleUnexpectedClose(gamePk) + if err != nil { + return feedResp, err + } + *ws = *newWs + return feedResp, err + } else if err != nil { + return nil, err + } + + feedResp, err = patch(feedResp, gamePk, ts, p.UpdateId) + if err != nil { + feedResp, err = statsapi.RequestFeed(gamePk) + } + return feedResp, err +} + func subscribe(cmd *cobra.Command, args []string) { pkStr := strconv.Itoa(gamePk) ws, _, err := newWebsocket(pkStr) @@ -86,31 +116,10 @@ func subscribe(cmd *cobra.Command, args []string) { log.Fatal(err) } - var feed statsapi.Feed for { fmt.Println(string(feedResp)) - err = json.Unmarshal(feedResp, &feed) - if err != nil { - log.Fatal(err) - } - ts := feed.MetaData.TimeStamp - - var p statsapi.Push - err = ws.ReadJSON(&p) - if websocket.IsUnexpectedCloseError(err, statsapi.GameFinalCode, statsapi.GameUnavailableCode) { - log.Println(err) - ws, feedResp, err = handleUnexpectedClose(pkStr) - if err != nil { - log.Fatal(err) - } - defer ws.Close() - continue - } else if err != nil { - log.Fatal(err) - } - - feedResp, err = updateFeed(feedResp, pkStr, ts, p.UpdateId) + feedResp, err = updateFeed(ws, feedResp, pkStr) if err != nil { log.Fatal(err) }