This commit is contained in:
filifa 2024-07-20 17:07:58 -05:00
parent 9238a8e03b
commit 1fe327c68c
1 changed files with 35 additions and 26 deletions

View File

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