commit 988b558671778cd34ee5474ea112ca0096b8fc1c
parent e0c29cdb5bc1c213642c42e175934ddb72533ff4
Author: n0tr1v <n0tr1v@protonmail.com>
Date: Sun, 17 Dec 2023 05:15:54 -0500
cleanup
Diffstat:
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)