commit 6256ebad406f49b51e287392311830d9e4b6f985
parent 64896d9521c406ca469e5f7bf5583a60221107e3
Author: n0tr1v <n0tr1v@protonmail.com>
Date: Tue, 12 Dec 2023 17:14:15 -0500
cleanup
Diffstat:
1 file changed, 30 insertions(+), 33 deletions(-)
diff --git a/pkg/web/handlers/poker/poker.go b/pkg/web/handlers/poker/poker.go
@@ -44,12 +44,13 @@ func NewPoker() *Poker {
return p
}
-func (p *Poker) GetOrCreateGame(roomID string) *PokerGame {
+func (p *Poker) GetOrCreateGame(roomID string, pokerTableID int64) *PokerGame {
p.Lock()
defer p.Unlock()
g, found := p.games[roomID]
if !found {
g = &PokerGame{
+ PokerTableID: pokerTableID,
PlayersEventCh: make(chan PlayerEvent),
Players: make([]*PokerStandingPlayer, NbPlayers),
DealerSeatIdx: atomic.Int32{},
@@ -133,9 +134,8 @@ func (p *PokerPlayer) isAllIn() bool {
return p.Cash == 0
}
-func (p *PokerPlayer) doBet(db *database.DkfDB, roomID string, bet int) {
- pokerTable, _ := db.GetPokerTableBySlug(roomID)
- account, _ := db.GetPokerTableAccount(p.UserID, pokerTable.ID)
+func (p *PokerPlayer) doBet(db *database.DkfDB, bet int, pokerTableID int64) {
+ account, _ := db.GetPokerTableAccount(p.UserID, pokerTableID)
account.Amount -= int64(bet)
account.AmountBet += int64(bet)
account.DoSave(db)
@@ -151,6 +151,7 @@ type PlayerCard struct {
type PokerGame struct {
sync.Mutex
+ PokerTableID int64
PlayersEventCh chan PlayerEvent
Players []*PokerStandingPlayer
PlayersMtx sync.RWMutex
@@ -340,7 +341,7 @@ func (g *PokerGame) incrDealerIdx() {
g.bigBlindIdx = (int(dealerIdx) + 2) % nbPlayers
}
-func (g *PokerGame) UnSitPlayer(db *database.DkfDB, roomID string, authUser *database.User, pokerTable database.PokerTable) error {
+func (g *PokerGame) UnSitPlayer(db *database.DkfDB, roomID string, authUser *database.User) error {
if g.Ongoing != nil {
if p := g.Ongoing.GetPlayer(authUser.Username); p != nil {
p.Unsit.Store(true)
@@ -351,20 +352,20 @@ func (g *PokerGame) UnSitPlayer(db *database.DkfDB, roomID string, authUser *dat
defer g.PlayersMtx.RUnlock()
for idx, p := range g.Players {
if p != nil && p.Username == authUser.Username {
- return g.UnSitPlayer1(db, roomID, p, idx, pokerTable)
+ return g.UnSitPlayer1(db, roomID, p, idx)
}
}
return errors.New("player is not sit")
}
-func (g *PokerGame) UnSitPlayer1(db *database.DkfDB, roomID string, player *PokerStandingPlayer, idx int, pokerTable database.PokerTable) error {
+func (g *PokerGame) UnSitPlayer1(db *database.DkfDB, roomID string, player *PokerStandingPlayer, idx int) error {
roomTopic := "room_" + roomID
user, err := db.GetUserByUsername(player.Username)
if err != nil {
return err
}
- account, err := db.GetPokerTableAccount(user.ID, pokerTable.ID)
+ account, err := db.GetPokerTableAccount(user.ID, g.PokerTableID)
if err != nil {
return err
}
@@ -605,7 +606,7 @@ OUTER:
if bet == 0 {
newLogEvent(g, roomLogsTopic, fmt.Sprintf("%s check", p.Username))
} else {
- p.doBet(db, roomID, bet)
+ p.doBet(db, bet, g.PokerTableID)
PokerPubSub.Pub(roomTopic, PlayerBetEvent{PlayerSeatIdx: p.SeatIdx, Player: p.Username, Bet: bet, TotalBet: p.Bet, Cash: p.Cash})
logMsg := fmt.Sprintf("%s call (%d)", p.Username, bet)
if p.isAllIn() {
@@ -621,7 +622,7 @@ OUTER:
lastRaisePlayerIdx = playerToPlayIdx
}
minBet = p.Bet + bet
- p.doBet(db, roomID, bet)
+ p.doBet(db, bet, g.PokerTableID)
PokerPubSub.Pub(roomTopic, PlayerBetEvent{PlayerSeatIdx: p.SeatIdx, Player: p.Username, Bet: bet, TotalBet: p.Bet, Cash: p.Cash})
logMsg := fmt.Sprintf("%s all-in (%d)", p.Username, bet)
if p.isAllIn() {
@@ -645,7 +646,7 @@ OUTER:
lastRaisePlayerIdx = playerToPlayIdx
}
minBet = p.Bet + bet
- p.doBet(db, roomID, bet)
+ p.doBet(db, bet, g.PokerTableID)
PokerPubSub.Pub(roomTopic, PlayerBetEvent{PlayerSeatIdx: p.SeatIdx, Player: p.Username, Bet: bet, TotalBet: p.Bet, Cash: p.Cash})
logMsg := fmt.Sprintf("%s bet %d", p.Username, bet)
if p.isAllIn() {
@@ -818,7 +819,7 @@ func dealerThread(db *database.DkfDB, g *PokerGame, roomID string) {
p := g.Ongoing.Players[g.smallBlindIdx]
bet := bigBlindBet / 2
- p.doBet(db, roomID, bet)
+ p.doBet(db, bet, g.PokerTableID)
PokerPubSub.Pub(roomTopic, PlayerBetEvent{PlayerSeatIdx: p.SeatIdx, Player: p.Username, Bet: bet, TotalBet: p.Bet, Cash: p.Cash})
newLogEvent(g, roomLogsTopic, fmt.Sprintf("%s small blind %d", p.Username, bet))
@@ -826,7 +827,7 @@ func dealerThread(db *database.DkfDB, g *PokerGame, roomID string) {
p = g.Ongoing.Players[g.bigBlindIdx]
bet = bigBlindBet
- p.doBet(db, roomID, bet)
+ p.doBet(db, bet, g.PokerTableID)
PokerPubSub.Pub(roomTopic, PlayerBetEvent{PlayerSeatIdx: p.SeatIdx, Player: p.Username, Bet: bet, TotalBet: p.Bet, Cash: p.Cash})
newLogEvent(g, roomLogsTopic, fmt.Sprintf("%s big blind %d", p.Username, bet))
@@ -887,7 +888,6 @@ END:
winners := g.Ongoing.computeWinners()
mainPot := int(g.Ongoing.MainPot.Load())
playersGain := processPot(winners, mainPot)
- pokerTable, _ := db.GetPokerTableBySlug(roomID)
var winnersStr, winnerHand string
if len(playersGain) >= 1 {
if len(playersGain) == 1 {
@@ -898,7 +898,7 @@ END:
tx := db.Begin()
for _, el := range playersGain {
newLogEvent(g, roomLogsTopic, fmt.Sprintf("Winner #%d: %s %s -> %d", el.Group, el.Player.Username, el.HandStr, el.Gain))
- account, _ := tx.GetPokerTableAccount(el.Player.UserID, pokerTable.ID)
+ account, _ := tx.GetPokerTableAccount(el.Player.UserID, g.PokerTableID)
account.Amount += int64(el.Gain)
account.AmountBet = 0
account.DoSave(tx)
@@ -906,7 +906,7 @@ END:
el.Player.Cash += el.Gain
}
for _, p := range g.Ongoing.Players {
- account, _ := tx.GetPokerTableAccount(p.UserID, pokerTable.ID)
+ account, _ := tx.GetPokerTableAccount(p.UserID, g.PokerTableID)
account.AmountBet = 0
account.DoSave(tx)
}
@@ -916,7 +916,7 @@ END:
// No winners, refund bets
tx := db.Begin()
for _, p := range g.Ongoing.Players {
- account, _ := tx.GetPokerTableAccount(p.UserID, pokerTable.ID)
+ account, _ := tx.GetPokerTableAccount(p.UserID, g.PokerTableID)
account.Amount += account.AmountBet
account.AmountBet = 0
account.DoSave(tx)
@@ -933,17 +933,13 @@ END:
time.Sleep(MinTimeAfterGame * time.Second)
// Auto unsit inactive players
- if pokerTable, err := db.GetPokerTableBySlug(roomID); err == nil {
- for idx, p := range g.Players {
- if p != nil && p.LastActionTS.Before(g.Ongoing.CreatedAt) {
- if err := g.UnSitPlayer1(db, roomID, p, idx, pokerTable); err == nil {
- PokerPubSub.Pub(roomTopic, PokerSeatLeftEvent{})
- newLogEvent(g, roomLogsTopic, fmt.Sprintf("%s auto un-sit", p.Username))
- }
+ for idx, p := range g.Players {
+ if p != nil && p.LastActionTS.Before(g.Ongoing.CreatedAt) {
+ if err := g.UnSitPlayer1(db, roomID, p, idx); err == nil {
+ PokerPubSub.Pub(roomTopic, PokerSeatLeftEvent{})
+ newLogEvent(g, roomLogsTopic, fmt.Sprintf("%s auto un-sit", p.Username))
}
}
- } else {
- logrus.Error(err)
}
g.IsGameStarted.Store(false)
@@ -1231,8 +1227,7 @@ func PokerUnSitHandler(c echo.Context) error {
authUser := c.Get("authUser").(*database.User)
roomID := c.Param("roomID")
html := hutils.HtmlCssReset + `<form method="post"><button>UnSit</button></form>`
- pokerTable, err := db.GetPokerTableBySlug(roomID)
- if err != nil {
+ if _, err := db.GetPokerTableBySlug(roomID); err != nil {
return c.HTML(http.StatusOK, html)
}
roomTopic := "room_" + roomID
@@ -1242,7 +1237,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, pokerTable); err == nil {
+ if err := g.UnSitPlayer(db, roomID, authUser); err == nil {
PokerPubSub.Pub(roomTopic, PokerSeatLeftEvent{})
newLogEvent(g, roomLogsTopic, fmt.Sprintf("%s un-sit", authUser.Username.String()))
}
@@ -1897,12 +1892,13 @@ func PokerLogsHandler(c echo.Context) error {
roomID := c.Param("roomID")
db := c.Get("database").(*database.DkfDB)
- if _, err := db.GetPokerTableBySlug(roomID); err != nil {
+ pokerTable, err := db.GetPokerTableBySlug(roomID)
+ if err != nil {
return c.Redirect(http.StatusFound, "/")
}
send := func(s string) { _, _ = c.Response().Write([]byte(s)) }
- g := PokerInstance.GetOrCreateGame(roomID)
+ g := PokerInstance.GetOrCreateGame(roomID, pokerTable.ID)
roomLogsTopic := "room_" + roomID + "_logs"
sub := PokerPubSub.Subscribe([]string{roomLogsTopic})
defer sub.Close()
@@ -1950,7 +1946,8 @@ func PokerHandler(c echo.Context) error {
authUser := c.Get("authUser").(*database.User)
db := c.Get("database").(*database.DkfDB)
- if _, err := db.GetPokerTableBySlug(roomID); err != nil {
+ pokerTable, err := db.GetPokerTableBySlug(roomID)
+ if err != nil {
return c.Redirect(http.StatusFound, "/")
}
@@ -1958,7 +1955,7 @@ func PokerHandler(c echo.Context) error {
roomUserTopic := "room_" + roomID + "_" + authUser.Username.String()
send := func(s string) { _, _ = c.Response().Write([]byte(s)) }
- g := PokerInstance.GetOrCreateGame(roomID)
+ g := PokerInstance.GetOrCreateGame(roomID, pokerTable.ID)
quit := hutils.CloseSignalChan(c)
hutils.SetStreamingHeaders(c)