dkforest

A forum and chat platform (onion)
git clone https://git.dasho.dev/n0tr1v/dkforest.git
Log | Files | Refs | LICENSE

commit 988b558671778cd34ee5474ea112ca0096b8fc1c
parent e0c29cdb5bc1c213642c42e175934ddb72533ff4
Author: n0tr1v <n0tr1v@protonmail.com>
Date:   Sun, 17 Dec 2023 05:15:54 -0500

cleanup

Diffstat:
Mpkg/web/handlers/poker/poker.go | 82++++++++++++++++++++++++++++++++++++++++----------------------------------------
1 file changed, 41 insertions(+), 41 deletions(-)

diff --git a/pkg/web/handlers/poker/poker.go b/pkg/web/handlers/poker/poker.go @@ -45,12 +45,13 @@ func NewPoker() *Poker { return p } -func (p *Poker) GetOrCreateGame(roomID RoomID, pokerTableID int64, pokerTableMinBet database.PokerChip, pokerTableIsTest bool) *PokerGame { +func (p *Poker) GetOrCreateGame(db *database.DkfDB, roomID RoomID, pokerTableID int64, pokerTableMinBet database.PokerChip, pokerTableIsTest bool) *PokerGame { p.Lock() defer p.Unlock() g, found := p.games[roomID] if !found { g = &PokerGame{ + DB: db, RoomID: roomID, PokerTableID: pokerTableID, PokerTableMinBet: pokerTableMinBet, @@ -154,7 +155,7 @@ func (p *PokerPlayer) gain(db *database.DkfDB, pokerTableID int64, gain database p.Bet = 0 } -func (p *PokerPlayer) resetBet(db *database.DkfDB, pokerTableID int64) { +func (p *PokerPlayer) resetBet() { // Do not track in database // DB keeps track of what was bet during the whole (1 hand) game p.Bet = 0 @@ -177,6 +178,7 @@ type PlayerCard struct { type PokerGame struct { sync.Mutex + DB *database.DkfDB RoomID RoomID PokerTableID int64 PokerTableMinBet database.PokerChip @@ -388,7 +390,7 @@ func (g *PokerGame) incrDealerIdx() { g.bigBlindIdx = (dealerIdx + startIDx + 1) % nbPlayers } -func (g *PokerGame) UnSitPlayer(db *database.DkfDB, roomID RoomID, authUser *database.User) error { +func (g *PokerGame) UnSitPlayer(roomID RoomID, authUser *database.User) error { if g.Ongoing != nil { if p := g.Ongoing.GetPlayer(authUser.Username); p != nil { p.Unsit.Store(true) @@ -398,24 +400,24 @@ func (g *PokerGame) UnSitPlayer(db *database.DkfDB, roomID RoomID, authUser *dat g.PlayersMtx.Lock() defer g.PlayersMtx.Unlock() if p := g.getPlayer(authUser.Username); p != nil { - return g.UnSitPlayer1(db, roomID, p) + return g.UnSitPlayer1(roomID, p) } return errors.New("player is not sit") } -func (g *PokerGame) UnSitPlayer1(db *database.DkfDB, roomID RoomID, seatedPlayer *SeatedPlayer) error { +func (g *PokerGame) UnSitPlayer1(roomID RoomID, seatedPlayer *SeatedPlayer) error { roomTopic := roomID.Topic() seatedPlayerUsername := seatedPlayer.Username - user, err := db.GetUserByUsername(seatedPlayerUsername) + user, err := g.DB.GetUserByUsername(seatedPlayerUsername) if err != nil { return err } - account, err := db.GetPokerTableAccount(user.ID, g.PokerTableID) + account, err := g.DB.GetPokerTableAccount(user.ID, g.PokerTableID) if err != nil { return err } - tx := db.Begin() + tx := g.DB.Begin() if g.PokerTableIsTest { user.ChipsTest += account.Amount } else { @@ -548,7 +550,7 @@ type AutoAction struct { } // Return either or not the game ended because only 1 player left playing (or none) -func execBettingRound(db *database.DkfDB, g *PokerGame, roomID RoomID, skip int, minBet database.PokerChip) bool { +func execBettingRound(g *PokerGame, roomID RoomID, skip int, minBet database.PokerChip) bool { roomTopic := roomID.Topic() dealerIdx := g.Ongoing.getPlayerIdxBySeatIdx(int(g.DealerSeatIdx.Load())) playerToPlayIdx := (dealerIdx + skip) % len(g.Ongoing.Players) @@ -651,7 +653,7 @@ RoundIsSettledLoop: if bet == 0 { g.newLogEvent(fmt.Sprintf("%s check", pUsername)) } else { - p.doBetAndNotif(db, g.PokerTableID, bet, roomTopic) + p.doBetAndNotif(g.DB, g.PokerTableID, bet, roomTopic) logMsg := fmt.Sprintf("%s call (%d)", pUsername, bet) if p.isAllIn() { logMsg += " (all-in)" @@ -668,7 +670,7 @@ RoundIsSettledLoop: lastRaisePlayerIdx = playerToPlayIdx } minBet = utils.MaxInt(p.GetBet()+bet, minBet) - p.doBetAndNotif(db, g.PokerTableID, bet, roomTopic) + p.doBetAndNotif(g.DB, g.PokerTableID, bet, roomTopic) logMsg := fmt.Sprintf("%s all-in (%d)", pUsername, bet) if p.isAllIn() { newlyAllInPlayers = append(newlyAllInPlayers, p) @@ -700,7 +702,7 @@ RoundIsSettledLoop: lastRaisePlayerIdx = playerToPlayIdx } minBet = utils.MaxInt(p.GetBet()+bet, minBet) - p.doBetAndNotif(db, g.PokerTableID, bet, roomTopic) + p.doBetAndNotif(g.DB, g.PokerTableID, bet, roomTopic) logMsg := fmt.Sprintf("%s bet %d", pUsername, bet) if p.isAllIn() { logMsg += " (all-in)" @@ -856,13 +858,13 @@ RoundIsSettled: firstPlayer := newArray[0] secondPlayer := newArray[1] diff := firstPlayer.GetBet() - secondPlayer.GetBet() - firstPlayer.refundPartialBet(db, g.PokerTableID, diff) + firstPlayer.refundPartialBet(g.DB, g.PokerTableID, diff) } // Transfer players bets into the main pot for _, p := range g.Ongoing.Players { mainPot += p.GetBet() - p.resetBet(db, g.PokerTableID) + p.resetBet() } PokerPubSub.Pub(roomTopic, PokerMainPotUpdatedEvent{MainPot: mainPot}) @@ -949,7 +951,7 @@ func computeAllInMaxGain(g *PokerGame, newlyAllInPlayers []*PokerPlayer, mainPot } } -func dealerThread(db *database.DkfDB, g *PokerGame, roomID RoomID) { +func dealerThread(g *PokerGame, roomID RoomID) { roomTopic := roomID.Topic() bigBlindBet := g.PokerTableMinBet collectRake := false @@ -1003,10 +1005,10 @@ func dealerThread(db *database.DkfDB, g *PokerGame, roomID RoomID) { PokerPubSub.Pub(roomTopic, GameStartedEvent{DealerSeatIdx: int(g.DealerSeatIdx.Load())}) g.newLogEvent(fmt.Sprintf("-- New game --")) - applySmallBlindBet(db, g, bigBlindBet, roomID) + applySmallBlindBet(g, bigBlindBet, roomID) time.Sleep(time.Second) - applyBigBlindBet(db, g, bigBlindBet, roomID) + applyBigBlindBet(g, bigBlindBet, roomID) time.Sleep(time.Second) // Deal players cards @@ -1015,7 +1017,7 @@ func dealerThread(db *database.DkfDB, g *PokerGame, roomID RoomID) { // Wait for players to bet/call/check/fold... time.Sleep(time.Second) skip := utils.Ternary(isHeadsUpGame, 1, 2) - if execBettingRound(db, g, roomID, skip, bigBlindBet) { + if execBettingRound(g, roomID, skip, bigBlindBet) { goto END } @@ -1034,7 +1036,7 @@ func dealerThread(db *database.DkfDB, g *PokerGame, roomID RoomID) { // Wait for players to bet/call/check/fold... time.Sleep(time.Second) - if execBettingRound(db, g, roomID, skip, 0) { + if execBettingRound(g, roomID, skip, 0) { goto END } @@ -1046,7 +1048,7 @@ func dealerThread(db *database.DkfDB, g *PokerGame, roomID RoomID) { // Wait for players to bet/call/check/fold... time.Sleep(time.Second) - if execBettingRound(db, g, roomID, skip, 0) { + if execBettingRound(g, roomID, skip, 0) { goto END } @@ -1058,7 +1060,7 @@ func dealerThread(db *database.DkfDB, g *PokerGame, roomID RoomID) { // Wait for players to bet/call/check/fold... time.Sleep(time.Second) - if execBettingRound(db, g, roomID, skip, 0) { + if execBettingRound(g, roomID, skip, 0) { goto END } @@ -1070,7 +1072,7 @@ END: winners := g.Ongoing.computeWinners() mainPot := g.Ongoing.getMainPot() playersGain, rake := processPot(winners, mainPot, g.PokerTableMinBet, collectRake) - winnersStr, winnerHand := applyGains(db, g, playersGain, mainPot, rake, roomID) + winnersStr, winnerHand := applyGains(g, playersGain, mainPot, rake, roomID) g.Ongoing.setMainPot(0) @@ -1081,26 +1083,26 @@ END: time.Sleep(MinTimeAfterGame * time.Second) // Auto unsit inactive players - autoUnsitInactivePlayers(db, g, roomID) + autoUnsitInactivePlayers(g, roomID) g.IsGameStarted.Store(false) } -func applySmallBlindBet(db *database.DkfDB, g *PokerGame, bigBlindBet database.PokerChip, roomID RoomID) { - applyBlindBet(db, g, g.smallBlindIdx, bigBlindBet/2, roomID, "small blind") +func applySmallBlindBet(g *PokerGame, bigBlindBet database.PokerChip, roomID RoomID) { + applyBlindBet(g, g.smallBlindIdx, bigBlindBet/2, roomID, "small blind") } -func applyBigBlindBet(db *database.DkfDB, g *PokerGame, bigBlindBet database.PokerChip, roomID RoomID) { - applyBlindBet(db, g, g.bigBlindIdx, bigBlindBet, roomID, "big blind") +func applyBigBlindBet(g *PokerGame, bigBlindBet database.PokerChip, roomID RoomID) { + applyBlindBet(g, g.bigBlindIdx, bigBlindBet, roomID, "big blind") } -func applyBlindBet(db *database.DkfDB, g *PokerGame, playerIdx int, bet database.PokerChip, roomID RoomID, name string) { +func applyBlindBet(g *PokerGame, playerIdx int, bet database.PokerChip, roomID RoomID, name string) { p := g.Ongoing.Players[playerIdx] - p.doBetAndNotif(db, g.PokerTableID, bet, roomID.Topic()) + p.doBetAndNotif(g.DB, g.PokerTableID, bet, roomID.Topic()) g.newLogEvent(fmt.Sprintf("%s %s %d", p.Username, name, bet)) } -func autoUnsitInactivePlayers(db *database.DkfDB, g *PokerGame, roomID RoomID) { +func autoUnsitInactivePlayers(g *PokerGame, roomID RoomID) { roomTopic := roomID.Topic() g.PlayersMtx.Lock() defer g.PlayersMtx.Unlock() @@ -1117,7 +1119,7 @@ func autoUnsitInactivePlayers(db *database.DkfDB, g *PokerGame, roomID RoomID) { (op == nil && !p.isEligible(g.PokerTableMinBet)) } if playerShallBeBooted { - if err := g.UnSitPlayer1(db, roomID, p); err == nil { + if err := g.UnSitPlayer1(roomID, p); err == nil { PokerPubSub.Pub(roomTopic, PokerSeatLeftEvent{}) g.newLogEvent(fmt.Sprintf("%s auto un-sit", p.Username)) } else { @@ -1128,9 +1130,9 @@ func autoUnsitInactivePlayers(db *database.DkfDB, g *PokerGame, roomID RoomID) { } } -func applyGains(db *database.DkfDB, g *PokerGame, playersGain []PlayerGain, mainPot, rake database.PokerChip, roomID RoomID) (winnersStr, winnerHand string) { +func applyGains(g *PokerGame, playersGain []PlayerGain, mainPot, rake database.PokerChip, roomID RoomID) (winnersStr, winnerHand string) { nbPlayersGain := len(playersGain) - tx := db.Begin() + tx := g.DB.Begin() if nbPlayersGain >= 1 { winnerHand = utils.Ternary(nbPlayersGain == 1, playersGain[0].HandStr, "Split pot") @@ -1145,7 +1147,7 @@ func applyGains(db *database.DkfDB, g *PokerGame, playersGain []PlayerGain, main el.Player.gain(tx, g.PokerTableID, el.Gain) } for _, op := range g.Ongoing.Players { - op.resetBet(tx, g.PokerTableID) + op.resetBet() } } else if nbPlayersGain == 0 { @@ -1272,7 +1274,7 @@ func cardToPokerCard(name string) string { return r.Replace(name) } -func (g *PokerGame) Deal(db *database.DkfDB, roomID RoomID, authUser *database.User) { +func (g *PokerGame) Deal(roomID RoomID, authUser *database.User) { roomTopic := roomID.Topic() roomUserTopic := roomID.UserTopic(authUser.Username) if g.CountEligibleSeated() < 2 { @@ -1290,7 +1292,7 @@ func (g *PokerGame) Deal(db *database.DkfDB, roomID RoomID, authUser *database.U g.Ongoing = NewOngoing(g) - go dealerThread(db, g, roomID) + go dealerThread(g, roomID) } func (g *PokerGame) CountEligibleSeated() (count int) { @@ -1452,13 +1454,12 @@ func (r RoomID) UserTopic(username database.Username) string { func PokerDealHandler(c echo.Context) error { roomID := RoomID(c.Param("roomID")) authUser := c.Get("authUser").(*database.User) - db := c.Get("database").(*database.DkfDB) g := PokerInstance.GetGame(roomID) if g == nil { return c.NoContent(http.StatusNotFound) } if c.Request().Method == http.MethodPost { - g.Deal(db, roomID, authUser) + g.Deal(roomID, authUser) } html := hutils.HtmlCssReset html += `<form method="post"><button>Deal</button></form>` @@ -1466,7 +1467,6 @@ func PokerDealHandler(c echo.Context) error { } func PokerUnSitHandler(c echo.Context) error { - db := c.Get("database").(*database.DkfDB) authUser := c.Get("authUser").(*database.User) roomID := RoomID(c.Param("roomID")) html := hutils.HtmlCssReset + `<form method="post"><button>UnSit</button></form>` @@ -1476,7 +1476,7 @@ func PokerUnSitHandler(c echo.Context) error { return c.NoContent(http.StatusNotFound) } if c.Request().Method == http.MethodPost { - if err := g.UnSitPlayer(db, roomID, authUser); err == nil { + if err := g.UnSitPlayer(roomID, authUser); err == nil { PokerPubSub.Pub(roomTopic, PokerSeatLeftEvent{}) g.newLogEvent(fmt.Sprintf("%s un-sit", authUser.Username.String())) } else { @@ -2299,7 +2299,7 @@ func PokerHandler(c echo.Context) error { roomUserTopic := roomID.UserTopic(authUser.Username) send := func(s string) { _, _ = c.Response().Write([]byte(s)) } - g := PokerInstance.GetOrCreateGame(roomID, pokerTable.ID, pokerTable.MinBet, pokerTable.IsTest) + g := PokerInstance.GetOrCreateGame(db, roomID, pokerTable.ID, pokerTable.MinBet, pokerTable.IsTest) quit := hutils.CloseSignalChan(c) hutils.SetStreamingHeaders(c)