cli to play

main
Bel LaPointe 2025-02-12 17:03:33 -07:00
parent e35ddef4b7
commit e565f1f8d8
2 changed files with 109 additions and 0 deletions

1
.gitignore vendored
View File

@ -1,3 +1,4 @@
**/*.sw*
/src/state/fsm/template
/pkg/state/fsm/template
/cmd/cli/cli

108
cmd/cli/main.go Normal file
View File

@ -0,0 +1,108 @@
package main
import (
"context"
"gitea/price-is-wrong/pkg/lib/db"
"gitea/price-is-wrong/pkg/state/lobby"
"gitea/price-is-wrong/pkg/state/priceiswrong"
"io"
"log"
"os"
"os/signal"
"strconv"
"syscall"
)
func main() {
ctx, can := signal.NotifyContext(context.Background(), syscall.SIGINT)
defer can()
if err := run(
ctx,
envOr("GAME_DB_DRIVER", "sqlite"),
envOr("GAME_DB_CONN", "/tmp/game.db"),
envOr("GAME_SESSION", "session"),
os.Args[1:],
); err != nil {
panic(err)
}
}
func envOr(k, v string) string {
if v := os.Getenv(k); v != "" {
return v
}
return v
}
func run(ctx context.Context, dbDriver, dbConn, session string, args []string) error {
b, err := db.New(ctx, dbDriver, dbConn)
if err != nil {
return err
}
defer b.Close()
ctx = db.Inject(ctx, b)
l, err := lobby.Open(ctx, session)
if err != nil {
return err
}
if !l.Closed {
if len(args) == 0 {
log.Printf("lobby | %+v", *l)
return nil
}
switch args[0] {
case "join":
return l.Join(ctx, mustParseInt(args[1]))
case "leave":
return l.Leave(ctx, mustParseInt(args[1]))
case "close":
return l.Close(ctx)
}
}
p, err := priceiswrong.Open(ctx, session)
if err != nil {
return err
} else if len(p.Contestants) > 0 {
} else if err := p.SetPlayers(ctx, l.Players); err != nil {
return err
}
if len(args) == 0 {
log.Printf("priceiswrong | %+v", *p)
return nil
}
defer func() {
log.Printf("priceiswrong | %+v", *p)
}()
switch args[0] {
case "guess":
return p.Guess(ctx, mustParseInt(args[1]), args[2])
case "score":
return p.Score(ctx, mustParseInt(args[1]), mustParseInt(args[2]))
case "sethost":
return p.SetHost(ctx, mustParseInt(args[1]))
case "setitem":
return p.SetItem(ctx, args[1], args[2], args[3], args[4])
case "setplayers":
ids := []int{}
for _, id := range args[1:] {
ids = append(ids, mustParseInt(id))
}
return p.SetPlayers(ctx, ids)
}
return io.EOF
}
func mustParseInt(a string) int {
i, err := strconv.Atoi(a)
if err != nil {
panic(err)
}
return i
}