impl first game reset but realize it must be an event to broadcast to all players

main
Bel LaPointe 2024-12-15 14:06:08 -07:00
parent f1282f588d
commit 57dd66e510
3 changed files with 44 additions and 2 deletions

View File

@ -666,3 +666,25 @@ func (games Games) createEvent(ctx context.Context, id string, v any) error {
) VALUES (?, ?, ?)
`, id, time.Now(), payload)
}
// TODO not impl gotta be an event so existing websockets look at new game
func (games *Games) Reset(ctx context.Context, gid string) (string, error) {
state, err := games.GameState(ctx, gid)
if err != nil {
return "", err
}
name, err := games.GameName(ctx, gid)
if err != nil {
return "", err
}
gid2, err := games.CreateGame(ctx, name)
if err != nil {
return "", err
}
for p := range state.Players {
if err := games.CreateEventPlayerJoin(ctx, gid2, p); err != nil {
return "", err
}
}
return gid2, nil
}

View File

@ -149,6 +149,26 @@ func TestGames(t *testing.T) {
} else if state.Completed.IsZero() {
t.Fatal("state.Completed is zero")
}
if id, err := games.Reset(ctx, id); err != nil {
t.Fatal(err)
} else if state, err := games.GameState(ctx, id); err != nil {
t.Fatal(err)
} else if state.Started {
t.Fatal("reset game is started", state.Started)
} else if !state.Completed.IsZero() {
t.Fatal("reset game is complete", state.Completed)
} else if len(state.Players) != 4 {
t.Fatal("reset game doesnt have all players", len(state.Players))
} else if p := state.Players["p1"]; !p.Empty() {
t.Fatal("reset game missing p1", p)
} else if p := state.Players["p2"]; !p.Empty() {
t.Fatal("reset game missing p2", p)
} else if p := state.Players["p3"]; !p.Empty() {
t.Fatal("reset game missing p3", p)
} else if p := state.Players["p4"]; !p.Empty() {
t.Fatal("reset game missing p4", p)
}
})
}

View File

@ -116,8 +116,8 @@ func (ugs *UserGameServer) listen(ctx context.Context, reader func(context.Conte
if gameState, err := ugs.games.GameState(ctx, ugs.ID); err != nil {
return err
} else if gameState.Completed.IsZero() {
} else {
return fmt.Errorf("not impl: new game: %+v", m)
} else if _, err := ugs.games.Reset(ctx, ugs.ID); err != nil {
return err // TODO ugs.ID = newid but for everyone
}
} else {
return fmt.Errorf("UNKNOWN: %+v", m)