dkforest

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

commit 6256ebad406f49b51e287392311830d9e4b6f985
parent 64896d9521c406ca469e5f7bf5583a60221107e3
Author: n0tr1v <n0tr1v@protonmail.com>
Date:   Tue, 12 Dec 2023 17:14:15 -0500

cleanup

Diffstat:
Mpkg/web/handlers/poker/poker.go | 63++++++++++++++++++++++++++++++---------------------------------
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)