dkforest

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

commit 8e061cc7d0a366459441f31457e153d1d8f4fad1
parent 59c1b8c3c132dd61e73215e55ab85a5b99d3a0e5
Author: n0tr1v <n0tr1v@protonmail.com>
Date:   Sun, 24 Dec 2023 17:14:58 -0500

refactor

Diffstat:
Mpkg/web/handlers/poker.go | 6+++---
Mpkg/web/handlers/poker/poker.go | 228++++++++++++++++++++++++++++++++++++++++----------------------------------------
2 files changed, 117 insertions(+), 117 deletions(-)

diff --git a/pkg/web/handlers/poker.go b/pkg/web/handlers/poker.go @@ -356,7 +356,7 @@ func PokerStreamHandler(c echo.Context) error { } defer usersStreamsManager.Inst.Remove(authUser.ID, roomTopic) - sub := poker.PokerPubSub.Subscribe([]string{roomTopic, roomUserTopic}) + sub := poker.PubSub.Subscribe([]string{roomTopic, roomUserTopic}) defer sub.Close() send(poker.BuildBaseHtml(g, authUser, chatRoomSlug)) @@ -380,7 +380,7 @@ func PokerLogsHandler(c echo.Context) error { return c.Redirect(http.StatusFound, "/") } roomLogsTopic := roomID.LogsTopic() - sub := poker.PokerPubSub.Subscribe([]string{roomLogsTopic}) + sub := poker.PubSub.Subscribe([]string{roomLogsTopic}) defer sub.Close() quit := hutils.CloseSignalChan(c) hutils.SetStreamingHeaders(c) @@ -420,7 +420,7 @@ func PokerBetHandler(c echo.Context) error { } roomUserTopic := roomID.UserTopic(authUser.ID) - sub := poker.PokerPubSub.Subscribe([]string{roomID.Topic(), roomUserTopic}) + sub := poker.PubSub.Subscribe([]string{roomID.Topic(), roomUserTopic}) defer sub.Close() quit := hutils.CloseSignalChan(c) hutils.SetStreamingHeaders(c) diff --git a/pkg/web/handlers/poker/poker.go b/pkg/web/handlers/poker/poker.go @@ -38,16 +38,16 @@ const animationTime = 1000 * time.Millisecond type Poker struct { sync.Mutex - games map[RoomID]*PokerGame + games map[RoomID]*Game } func newPoker() *Poker { p := &Poker{} - p.games = make(map[RoomID]*PokerGame) + p.games = make(map[RoomID]*Game) return p } -func (p *Poker) GetGame(roomID RoomID) *PokerGame { +func (p *Poker) GetGame(roomID RoomID) *Game { p.Lock() defer p.Unlock() g, found := PokerInstance.games[roomID] @@ -58,7 +58,7 @@ func (p *Poker) GetGame(roomID RoomID) *PokerGame { } func (p *Poker) GetOrCreateGame(db *database.DkfDB, roomID RoomID, pokerTableID int64, - pokerTableMinBet database.PokerChip, pokerTableIsTest bool) *PokerGame { + pokerTableMinBet database.PokerChip, pokerTableIsTest bool) *Game { p.Lock() defer p.Unlock() g, found := p.games[roomID] @@ -69,22 +69,22 @@ func (p *Poker) GetOrCreateGame(db *database.DkfDB, roomID RoomID, pokerTableID } func (p *Poker) CreateGame(db *database.DkfDB, roomID RoomID, pokerTableID int64, - pokerTableMinBet database.PokerChip, pokerTableIsTest bool) *PokerGame { + pokerTableMinBet database.PokerChip, pokerTableIsTest bool) *Game { p.Lock() defer p.Unlock() return p.createGame(db, roomID, pokerTableID, pokerTableMinBet, pokerTableIsTest) } func (p *Poker) createGame(db *database.DkfDB, roomID RoomID, pokerTableID int64, - pokerTableMinBet database.PokerChip, pokerTableIsTest bool) *PokerGame { + pokerTableMinBet database.PokerChip, pokerTableIsTest bool) *Game { g := p.newGame(db, roomID, pokerTableID, pokerTableMinBet, pokerTableIsTest) p.games[roomID] = g return g } func (p *Poker) newGame(db *database.DkfDB, roomID RoomID, pokerTableID int64, - pokerTableMinBet database.PokerChip, pokerTableIsTest bool) *PokerGame { - g := &PokerGame{ + pokerTableMinBet database.PokerChip, pokerTableIsTest bool) *Game { + g := &Game{ db: db, roomID: roomID, pokerTableID: pokerTableID, @@ -182,7 +182,7 @@ func (p seatedPlayers) toPokerPlayers() pokerPlayers { return players } -func (g *PokerGame) getEligibles() (out seatedPlayers) { +func (g *Game) getEligibles() (out seatedPlayers) { eligiblePlayers := make(seatedPlayers, 0) g.Players.RWith(func(gPlayers seatedPlayers) { for _, p := range gPlayers { @@ -228,42 +228,42 @@ type PokerPlayer struct { countChancesToAction int } -func (g *PokerGame) IsBet() (out bool) { +func (g *Game) IsBet() (out bool) { if g.ongoing != nil { return !g.ongoing.hasBet.Get() } return } -func (g *PokerGame) IsYourTurn(player *PokerPlayer) (out bool) { +func (g *Game) IsYourTurn(player *PokerPlayer) (out bool) { if g.ongoing != nil { return player.userID == g.ongoing.playerToPlay.Get() } return } -func (g *PokerGame) CanCheck(player *PokerPlayer) (out bool) { +func (g *Game) CanCheck(player *PokerPlayer) (out bool) { if g.ongoing != nil { return player.bet.Get() == g.ongoing.MinBet.Get() } return } -func (g *PokerGame) CanFold(player *PokerPlayer) (out bool) { +func (g *Game) CanFold(player *PokerPlayer) (out bool) { if g.ongoing != nil { return player.bet.Get() < g.ongoing.MinBet.Get() } return } -func (g *PokerGame) MinBet() (out database.PokerChip) { +func (g *Game) MinBet() (out database.PokerChip) { if g.ongoing != nil { return g.ongoing.MinBet.Get() } return } -func (p *PokerGame) MinRaise() (out database.PokerChip) { +func (p *Game) MinRaise() (out database.PokerChip) { if p.ongoing != nil { return p.ongoing.MinRaise.Get() } @@ -317,7 +317,7 @@ func (p *PokerPlayer) refundBet(db *database.DkfDB, pokerTableID int64) { func (p *PokerPlayer) doBetAndNotif(db *database.DkfDB, pokerTableID int64, bet database.PokerChip, roomTopic string) { p.doBet(db, pokerTableID, bet) - PokerPubSub.Pub(roomTopic, PlayerBetEvent{PlayerSeatIdx: p.seatIdx, Player: p.username, Bet: bet, TotalBet: p.GetBet(), Cash: p.getCash()}) + PubSub.Pub(roomTopic, PlayerBetEvent{PlayerSeatIdx: p.seatIdx, Player: p.username, Bet: bet, TotalBet: p.GetBet(), Cash: p.getCash()}) } type playerCard struct { @@ -325,7 +325,7 @@ type playerCard struct { name string } -type PokerGame struct { +type Game struct { Players rwmtx.RWMtx[seatedPlayers] ongoing *ongoingGame db *database.DkfDB @@ -344,42 +344,42 @@ type gameResult struct { players []*PokerPlayer } -func (g *PokerGame) GetLogs() (out []LogEvent) { +func (g *Game) GetLogs() (out []LogEvent) { if g.ongoing != nil { out = g.ongoing.logEvents.Clone() } return } -func (g *PokerGame) Check(userID database.UserID) { +func (g *Game) Check(userID database.UserID) { g.sendPlayerEvent(playerEvent{UserID: userID, Check: true}) } -func (g *PokerGame) AllIn(userID database.UserID) { +func (g *Game) AllIn(userID database.UserID) { g.sendPlayerEvent(playerEvent{UserID: userID, AllIn: true}) } -func (g *PokerGame) Raise(userID database.UserID) { +func (g *Game) Raise(userID database.UserID) { g.sendPlayerEvent(playerEvent{UserID: userID, Raise: true}) } -func (g *PokerGame) Bet(userID database.UserID, bet database.PokerChip) { +func (g *Game) Bet(userID database.UserID, bet database.PokerChip) { g.sendPlayerEvent(playerEvent{UserID: userID, Bet: bet}) } -func (g *PokerGame) Call(userID database.UserID) { +func (g *Game) Call(userID database.UserID) { g.sendPlayerEvent(playerEvent{UserID: userID, Call: true}) } -func (g *PokerGame) Fold(userID database.UserID) { +func (g *Game) Fold(userID database.UserID) { g.sendPlayerEvent(playerEvent{UserID: userID, Fold: true}) } -func (g *PokerGame) sendUnsitPlayerEvent(userID database.UserID) { +func (g *Game) sendUnsitPlayerEvent(userID database.UserID) { g.sendPlayerEvent(playerEvent{UserID: userID, Unsit: true}) } -func (g *PokerGame) sendPlayerEvent(evt playerEvent) { +func (g *Game) sendPlayerEvent(evt playerEvent) { select { case g.playersEventCh <- evt: default: @@ -479,8 +479,8 @@ func (g *ongoingGame) GetDeckHash() string { return utils.MD5([]byte(g.getDeckStr())) } -// Get the player index in ongoingGame.Players from a seat index (index in PokerGame.Players) -// [nil p1 nil nil p2 nil] -> PokerGame.Players +// Get the player index in ongoingGame.Players from a seat index (index in Game.Players) +// [nil p1 nil nil p2 nil] -> Game.Players // [p1 p2] -> ongoingGame.Players func (g *ongoingGame) getPlayerBySeatIdx(seatIdx int) (*PokerPlayer, int) { for idx, p := range g.players { @@ -511,15 +511,15 @@ func (g *ongoingGame) countAlivePlayers() (playerAlive int) { // IsSeatedUnsafe returns either or not a userID is seated at the table. // WARN: The caller of this function needs to ensure that g.Players has been Lock/RLock -func (g *PokerGame) IsSeatedUnsafe(userID database.UserID) bool { +func (g *Game) IsSeatedUnsafe(userID database.UserID) bool { return isSeated(*g.Players.Val(), userID) } -func (g *PokerGame) IsSeated(userID database.UserID) bool { +func (g *Game) IsSeated(userID database.UserID) bool { return isSeated(g.Players.Get(), userID) } -func (g *PokerGame) isSeated(userID database.UserID) (out bool) { +func (g *Game) isSeated(userID database.UserID) (out bool) { g.Players.RWith(func(gPlayers seatedPlayers) { out = isSeated(gPlayers, userID) }) return } @@ -551,7 +551,7 @@ func isRoundSettled(players []*PokerPlayer) bool { return true } -func (g *PokerGame) incrDealerIdx() (smallBlindIdx, bigBlindIdx int) { +func (g *Game) incrDealerIdx() (smallBlindIdx, bigBlindIdx int) { ongoing := g.ongoing nbPlayers := len(ongoing.players) dealerSeatIdx := g.dealerSeatIdx.Load() @@ -570,7 +570,7 @@ func (g *PokerGame) incrDealerIdx() (smallBlindIdx, bigBlindIdx int) { return } -func (g *PokerGame) Sit(userID database.UserID, username database.Username, pos int) { +func (g *Game) Sit(userID database.UserID, username database.Username, pos int) { if err := g.Players.WithE(func(gPlayers *seatedPlayers) error { pokerTable, err := g.db.GetPokerTableBySlug(g.roomID.String()) if err != nil { @@ -600,17 +600,17 @@ func (g *PokerGame) Sit(userID database.UserID, username database.Username, pos lastActionTS: time.Now(), } - PokerPubSub.Pub(g.roomID.Topic(), PokerSeatTakenEvent{}) + PubSub.Pub(g.roomID.Topic(), PokerSeatTakenEvent{}) g.newLogEvent(fmt.Sprintf("%s sit", username.String())) return nil }); err != nil { - PokerPubSub.Pub(g.roomID.UserTopic(userID), NewErrorMsgEvent(err.Error())) + PubSub.Pub(g.roomID.UserTopic(userID), NewErrorMsgEvent(err.Error())) return } } -func (g *PokerGame) UnSit(userID database.UserID) { +func (g *Game) UnSit(userID database.UserID) { g.Players.With(func(gPlayers *seatedPlayers) { if p := gPlayers.get(userID); p != nil { g.unSitPlayer(gPlayers, p) @@ -619,7 +619,7 @@ func (g *PokerGame) UnSit(userID database.UserID) { }) } -func (g *PokerGame) unSitPlayer(gPlayers *seatedPlayers, seatedPlayer *seatedPlayer) { +func (g *Game) unSitPlayer(gPlayers *seatedPlayers, seatedPlayer *seatedPlayer) { ongoing := g.ongoing if ongoing != nil { if player := ongoing.players.get(seatedPlayer.userID); player != nil { @@ -629,14 +629,14 @@ func (g *PokerGame) unSitPlayer(gPlayers *seatedPlayers, seatedPlayer *seatedPla player.cards.RWith(func(playerCards []playerCard) { for _, card := range playerCards { evt := PokerEvent{ID: "card" + itoa(card.idx), Name: "", Idx: card.idx, Top: BurnStackY, Left: BurnStackX, Angle: "0deg", Reveal: false} - PokerPubSub.Pub(g.roomID.Topic(), evt) + PubSub.Pub(g.roomID.Topic(), evt) ongoing.events.Append(evt) } }) } } (*gPlayers)[seatedPlayer.seatIdx] = nil - PokerPubSub.Pub(g.roomID.Topic(), PokerSeatLeftEvent{}) + PubSub.Pub(g.roomID.Topic(), PokerSeatLeftEvent{}) } func generateDeck() []string { @@ -660,16 +660,16 @@ func newOngoing(eligiblePlayers seatedPlayers) *ongoingGame { } } -func (g *PokerGame) newLogEvent(msg string) { +func (g *Game) newLogEvent(msg string) { ongoing := g.ongoing logEvt := LogEvent{Message: msg} - PokerPubSub.Pub(g.roomID.LogsTopic(), logEvt) + PubSub.Pub(g.roomID.LogsTopic(), logEvt) if ongoing != nil { ongoing.logEvents.Append(logEvt) } } -func showCards(g *PokerGame, seats []Seat) { +func showCards(g *Game, seats []Seat) { ongoing := g.ongoing roomTopic := g.roomID.Topic() for _, p := range ongoing.players { @@ -689,22 +689,22 @@ func showCards(g *PokerGame, seats []Seat) { } evt1 := PokerEvent{ID: "card" + itoa(firstCard.idx), Name: firstCard.name, Idx: firstCard.idx, Top: seatData.Top, Left: seatData.Left, Reveal: true} evt2 := PokerEvent{ID: "card" + itoa(secondCard.idx), Name: secondCard.name, Idx: secondCard.idx, Top: seatData.Top, Left: seatData.Left + 53, Reveal: true} - PokerPubSub.Pub(roomTopic, evt1) - PokerPubSub.Pub(roomTopic, evt2) + PubSub.Pub(roomTopic, evt1) + PubSub.Pub(roomTopic, evt2) ongoing.events.Append(evt1, evt2) } } } -func setWaitTurn(g *PokerGame, seatIdx int) { +func setWaitTurn(g *Game, seatIdx int) { evt := PokerWaitTurnEvent{Idx: seatIdx, CreatedAt: time.Now()} - PokerPubSub.Pub(g.roomID.Topic(), evt) + PubSub.Pub(g.roomID.Topic(), evt) g.ongoing.waitTurnEvent.Set(evt) } -func setAutoAction(g *PokerGame, roomUserTopic, msg string) { +func setAutoAction(g *Game, roomUserTopic, msg string) { evt := AutoActionEvent{Message: msg} - PokerPubSub.Pub(roomUserTopic, evt) + PubSub.Pub(roomUserTopic, evt) g.ongoing.autoActionEvent.Set(evt) } @@ -752,7 +752,7 @@ type autoAction struct { evt playerEvent } -func foldPlayer(g *PokerGame, p *PokerPlayer) { +func foldPlayer(g *Game, p *PokerPlayer) { roomTopic := g.roomID.Topic() p.folded.Store(true) var firstCardIdx, secondCardIdx int @@ -762,12 +762,12 @@ func foldPlayer(g *PokerGame, p *PokerPlayer) { }) evt1 := PokerEvent{ID: "card" + itoa(firstCardIdx), Name: "", Idx: firstCardIdx, Top: BurnStackY, Left: BurnStackX, Angle: "0deg", Reveal: false} evt2 := PokerEvent{ID: "card" + itoa(secondCardIdx), Name: "", Idx: secondCardIdx, Top: BurnStackY, Left: BurnStackX, Angle: "0deg", Reveal: false} - PokerPubSub.Pub(roomTopic, evt1) - PokerPubSub.Pub(roomTopic, evt2) + PubSub.Pub(roomTopic, evt1) + PubSub.Pub(roomTopic, evt2) g.ongoing.events.Append(evt1, evt2) } -func doUnsit(g *PokerGame, p *PokerPlayer, playerAlive *int) int { +func doUnsit(g *Game, p *PokerPlayer, playerAlive *int) int { *playerAlive = g.ongoing.countAlivePlayers() if *playerAlive == 1 { p.countChancesToAction-- @@ -776,7 +776,7 @@ func doUnsit(g *PokerGame, p *PokerPlayer, playerAlive *int) int { return continueGetPlayerEventLoop } -func doTimeout(g *PokerGame, p *PokerPlayer, playerAlive *int) int { +func doTimeout(g *Game, p *PokerPlayer, playerAlive *int) int { pUsername := p.username if p.GetBet() < g.ongoing.MinBet.Get() { foldPlayer(g, p) @@ -795,11 +795,11 @@ func doTimeout(g *PokerGame, p *PokerPlayer, playerAlive *int) int { return breakGetPlayerEventLoop } -func doCheck(g *PokerGame, p *PokerPlayer) int { +func doCheck(g *Game, p *PokerPlayer) int { minBet := g.ongoing.MinBet.Get() if p.GetBet() < minBet { msg := fmt.Sprintf("Need to bet %d", minBet-p.GetBet()) - PokerPubSub.Pub(g.roomID.UserTopic(p.userID), NewErrorMsgEvent(msg)) + PubSub.Pub(g.roomID.UserTopic(p.userID), NewErrorMsgEvent(msg)) return continueGetPlayerEventLoop } p.hasChecked = true @@ -808,11 +808,11 @@ func doCheck(g *PokerGame, p *PokerPlayer) int { return doNothing } -func doFold(g *PokerGame, p *PokerPlayer, playerAlive *int) int { +func doFold(g *Game, p *PokerPlayer, playerAlive *int) int { roomUserTopic := g.roomID.UserTopic(p.userID) if p.GetBet() == g.ongoing.MinBet.Get() { msg := fmt.Sprintf("Cannot fold if there is no bet; check") - PokerPubSub.Pub(roomUserTopic, NewErrorMsgEvent(msg)) + PubSub.Pub(roomUserTopic, NewErrorMsgEvent(msg)) return doCheck(g, p) } foldPlayer(g, p) @@ -821,13 +821,13 @@ func doFold(g *PokerGame, p *PokerPlayer, playerAlive *int) int { *playerAlive-- if *playerAlive == 1 { - PokerPubSub.Pub(roomUserTopic, NewErrorMsgEvent("")) + PubSub.Pub(roomUserTopic, NewErrorMsgEvent("")) return breakRoundIsSettledLoop } return doNothing } -func doCall(g *PokerGame, p *PokerPlayer, +func doCall(g *Game, p *PokerPlayer, newlyAllInPlayers *[]*PokerPlayer, lastBetPlayerIdx *int, playerToPlayIdx int) int { pUsername := p.username bet := utils.MinInt(g.ongoing.MinBet.Get()-p.GetBet(), p.getCash()) @@ -844,14 +844,14 @@ func doCall(g *PokerGame, p *PokerPlayer, return doNothing } -func doAllIn(g *PokerGame, p *PokerPlayer, +func doAllIn(g *Game, p *PokerPlayer, newlyAllInPlayers *[]*PokerPlayer, lastBetPlayerIdx *int, playerToPlayIdx int) int { bet := p.getCash() minBet := g.ongoing.MinBet.Get() if (p.GetBet() + bet) > minBet { *lastBetPlayerIdx = playerToPlayIdx g.ongoing.MinRaise.Set(bet) - PokerPubSub.Pub(g.roomID.Topic(), PokerMinRaiseUpdatedEvent{MinRaise: bet}) + PubSub.Pub(g.roomID.Topic(), PokerMinRaiseUpdatedEvent{MinRaise: bet}) } g.ongoing.MinBet.Set(utils.MaxInt(p.GetBet()+bet, minBet)) p.doBetAndNotif(g.db, g.pokerTableID, bet, g.roomID.Topic()) @@ -864,13 +864,13 @@ func doAllIn(g *PokerGame, p *PokerPlayer, return doNothing } -func doRaise(g *PokerGame, p *PokerPlayer, +func doRaise(g *Game, p *PokerPlayer, newlyAllInPlayers *[]*PokerPlayer, lastBetPlayerIdx *int, playerToPlayIdx int, evt playerEvent) int { evt.Bet = g.ongoing.MinRaise.Get() return doBet(g, p, newlyAllInPlayers, lastBetPlayerIdx, playerToPlayIdx, evt) } -func doBet(g *PokerGame, p *PokerPlayer, +func doBet(g *Game, p *PokerPlayer, newlyAllInPlayers *[]*PokerPlayer, lastBetPlayerIdx *int, playerToPlayIdx int, evt playerEvent) int { roomTopic := g.roomID.Topic() roomUserTopic := g.roomID.UserTopic(p.userID) @@ -887,11 +887,11 @@ func doBet(g *PokerGame, p *PokerPlayer, // Ensure the player cannot bet below the table minimum bet (amount of the big blind) if evt.Bet < minRaise { msg := fmt.Sprintf("%s (%d) is too low. Must %s at least %d", betLbl, evt.Bet, betLbl, minRaise) - PokerPubSub.Pub(roomUserTopic, NewErrorMsgEvent(msg)) + PubSub.Pub(roomUserTopic, NewErrorMsgEvent(msg)) return continueGetPlayerEventLoop } *lastBetPlayerIdx = playerToPlayIdx - PokerPubSub.Pub(g.roomID.Topic(), PokerMinRaiseUpdatedEvent{MinRaise: evt.Bet}) + PubSub.Pub(g.roomID.Topic(), PokerMinRaiseUpdatedEvent{MinRaise: evt.Bet}) g.ongoing.MinRaise.Set(evt.Bet) g.ongoing.MinBet.Set(playerTotalBet) @@ -907,7 +907,7 @@ func doBet(g *PokerGame, p *PokerPlayer, return doNothing } -func handleAutoActionReceived(g *PokerGame, autoCache map[database.UserID]autoAction, evt playerEvent) int { +func handleAutoActionReceived(g *Game, autoCache map[database.UserID]autoAction, evt playerEvent) int { roomUserTopic := g.roomID.UserTopic(evt.UserID) autoActionVal := autoCache[evt.UserID] if evt.Fold && autoActionVal.action == FoldAction || @@ -935,7 +935,7 @@ func handleAutoActionReceived(g *PokerGame, autoCache map[database.UserID]autoAc return continueGetPlayerEventLoop } -func applyAutoAction(g *PokerGame, p *PokerPlayer, +func applyAutoAction(g *Game, p *PokerPlayer, newlyAllInPlayers *[]*PokerPlayer, lastBetPlayerIdx, playerAlive *int, playerToPlayIdx int, autoAction autoAction, autoCache map[database.UserID]autoAction) (actionResult int) { @@ -951,7 +951,7 @@ func applyAutoAction(g *PokerGame, p *PokerPlayer, return actionResult } -func handlePlayerActionEvent(g *PokerGame, p *PokerPlayer, +func handlePlayerActionEvent(g *Game, p *PokerPlayer, newlyAllInPlayers *[]*PokerPlayer, lastBetPlayerIdx, playerAlive *int, playerToPlayIdx int, evt playerEvent) (actionResult int) { @@ -975,12 +975,12 @@ func handlePlayerActionEvent(g *PokerGame, p *PokerPlayer, } // Return either or not the game ended because only 1 player left playing (or none) -func execBettingRound(g *PokerGame, skip int, minBet database.PokerChip) bool { +func execBettingRound(g *Game, skip int, minBet database.PokerChip) bool { roomID := g.roomID roomTopic := roomID.Topic() g.ongoing.MinBet.Set(minBet) g.ongoing.MinRaise.Set(g.PokerTableMinBet) - PokerPubSub.Pub(roomTopic, PokerMinRaiseUpdatedEvent{MinRaise: g.PokerTableMinBet}) + PubSub.Pub(roomTopic, PokerMinRaiseUpdatedEvent{MinRaise: g.PokerTableMinBet}) db := g.db ongoing := g.ongoing _, dealerIdx := ongoing.getPlayerBySeatIdx(int(g.dealerSeatIdx.Load())) @@ -995,7 +995,7 @@ func execBettingRound(g *PokerGame, skip int, minBet database.PokerChip) bool { p.status.Set("") } } - PokerPubSub.Pub(roomTopic, RedrawSeatsEvent{}) + PubSub.Pub(roomTopic, RedrawSeatsEvent{}) playerAlive := ongoing.countAlivePlayers() @@ -1028,10 +1028,10 @@ RoundIsSettledLoop: minBet = g.ongoing.MinBet.Get() - PokerPubSub.Pub(roomUserTopic, RefreshButtonsEvent{}) + PubSub.Pub(roomUserTopic, RefreshButtonsEvent{}) setWaitTurn(g, p.seatIdx) - PokerPubSub.Pub(roomUserTopic, PokerYourTurnEvent{}) + PubSub.Pub(roomUserTopic, PokerYourTurnEvent{}) // Maximum time allowed for the player to send his action waitCh := time.After(MaxUserCountdown * time.Second) @@ -1073,8 +1073,8 @@ RoundIsSettledLoop: case breakRoundIsSettledLoop: break RoundIsSettledLoop } - PokerPubSub.Pub(roomUserTopic, NewErrorMsgEvent("")) - PokerPubSub.Pub(roomTopic, RedrawSeatsEvent{}) + PubSub.Pub(roomUserTopic, NewErrorMsgEvent("")) + PubSub.Pub(roomTopic, RedrawSeatsEvent{}) break GetPlayerEventLoop } // End of repeat until we get an event from the player we're interested in } // End of repeat until all players have played @@ -1087,7 +1087,7 @@ RoundIsSettledLoop: RoundIsSettled: setAutoAction(g, roomTopic, "") - PokerPubSub.Pub(roomTopic, NewErrorMsgEvent("")) + PubSub.Pub(roomTopic, NewErrorMsgEvent("")) g.newLogEvent(fmt.Sprintf("--")) setWaitTurn(g, -1) @@ -1106,7 +1106,7 @@ RoundIsSettled: // Transfer players bets into the main pot mainPot += resetPlayersBet(ongoing) - PokerPubSub.Pub(roomTopic, PokerMainPotUpdatedEvent{MainPot: mainPot}) + PubSub.Pub(roomTopic, PokerMainPotUpdatedEvent{MainPot: mainPot}) ongoing.setMainPot(mainPot) g.ongoing.hasBet.Set(false) @@ -1134,7 +1134,7 @@ func refundUncalledBet(db *database.DkfDB, ongoing *ongoingGame, pokerTableID in diff := firstPlayer.GetBet() - secondPlayer.GetBet() if diff > 0 { firstPlayer.refundPartialBet(db, pokerTableID, diff) - PokerPubSub.Pub(roomTopic, RedrawSeatsEvent{}) + PubSub.Pub(roomTopic, RedrawSeatsEvent{}) time.Sleep(animationTime) } } @@ -1157,7 +1157,7 @@ var dealerTokenPos = [][]int{ {363, 123}, } -func burnCard(g *PokerGame, idx, burnIdx *int) { +func burnCard(g *Game, idx, burnIdx *int) { ongoing := g.ongoing *idx++ evt := PokerEvent{ @@ -1167,12 +1167,12 @@ func burnCard(g *PokerGame, idx, burnIdx *int) { Top: BurnStackY + (*burnIdx * 2), Left: BurnStackX + (*burnIdx * 4), } - PokerPubSub.Pub(g.roomID.Topic(), evt) + PubSub.Pub(g.roomID.Topic(), evt) ongoing.events.Append(evt) *burnIdx++ } -func dealCard(g *PokerGame, idx *int, dealCardIdx int) { +func dealCard(g *Game, idx *int, dealCardIdx int) { ongoing := g.ongoing card := ongoing.deck[*idx] *idx++ @@ -1184,12 +1184,12 @@ func dealCard(g *PokerGame, idx *int, dealCardIdx int) { Left: DealX + (dealCardIdx * DealSpacing), Reveal: true, } - PokerPubSub.Pub(g.roomID.Topic(), evt) + PubSub.Pub(g.roomID.Topic(), evt) ongoing.events.Append(evt) ongoing.communityCards = append(ongoing.communityCards, card) } -func dealPlayersCards(g *PokerGame, seats []Seat, idx *int) { +func dealPlayersCards(g *Game, seats []Seat, idx *int) { roomID := g.roomID ongoing := g.ongoing roomTopic := roomID.Topic() @@ -1230,8 +1230,8 @@ func dealPlayersCards(g *PokerGame, seats []Seat, idx *int) { evt := PokerEvent{ID: "card" + itoa(*idx), Name: "", Idx: *idx, Top: top, Left: left, Angle: seatData.Angle} evt1 := PokerEvent{ID: "card" + itoa(*idx), Name: card, Idx: *idx, Top: seatData1.Top, Left: seatData1.Left, Reveal: true, UserID: pUserID} - PokerPubSub.Pub(roomTopic, evt) - PokerPubSub.Pub(roomUserTopic, evt1) + PubSub.Pub(roomTopic, evt) + PubSub.Pub(roomUserTopic, evt1) p.cards.With(func(pCards *[]playerCard) { *pCards = append(*pCards, playerCard{idx: *idx, name: card}) @@ -1252,7 +1252,7 @@ func computeAllInMaxGain(ongoing *ongoingGame, newlyAllInPlayers []*PokerPlayer, } } -func dealerThread(g *PokerGame, eligiblePlayers seatedPlayers) { +func dealerThread(g *Game, eligiblePlayers seatedPlayers) { eligiblePlayers.resetStatuses() g.ongoing = newOngoing(eligiblePlayers) @@ -1277,7 +1277,7 @@ func dealerThread(g *PokerGame, eligiblePlayers seatedPlayers) { sbIdx, bbIdx := g.incrDealerIdx() - PokerPubSub.Pub(roomTopic, GameStartedEvent{DealerSeatIdx: int(g.dealerSeatIdx.Load())}) + PubSub.Pub(roomTopic, GameStartedEvent{DealerSeatIdx: int(g.dealerSeatIdx.Load())}) g.newLogEvent(fmt.Sprintf("-- New game --")) applySmallBlindBet(g, bigBlindBet, sbIdx) @@ -1291,7 +1291,7 @@ func dealerThread(g *PokerGame, eligiblePlayers seatedPlayers) { // Deal players cards dealPlayersCards(g, seats, &idx) - PokerPubSub.Pub(roomTopic, RefreshButtonsEvent{}) + PubSub.Pub(roomTopic, RefreshButtonsEvent{}) // Wait for players to bet/call/check/fold... time.Sleep(animationTime) @@ -1358,7 +1358,7 @@ END: ongoing.setMainPot(0) - PokerPubSub.Pub(roomTopic, GameIsDoneEvent{Winner: winnersStr, WinnerHand: winnerHand}) + PubSub.Pub(roomTopic, GameIsDoneEvent{Winner: winnersStr, WinnerHand: winnerHand}) g.newLogEvent(fmt.Sprintf("-- Game ended --")) // Wait a minimum of X seconds before allowing a new game @@ -1367,7 +1367,7 @@ END: // Auto unsit inactive players autoUnsitInactivePlayers(g) - PokerPubSub.Pub(roomTopic, GameIsOverEvent{}) + PubSub.Pub(roomTopic, GameIsOverEvent{}) g.isGameStarted.Store(false) } @@ -1385,21 +1385,21 @@ func (g *ongoingGame) gameStr() string { return out } -func applySmallBlindBet(g *PokerGame, bigBlindBet database.PokerChip, sbIdx int) { +func applySmallBlindBet(g *Game, bigBlindBet database.PokerChip, sbIdx int) { applyBlindBet(g, sbIdx, bigBlindBet/2, "small blind") } -func applyBigBlindBet(g *PokerGame, bigBlindBet database.PokerChip, bbIdx int) { +func applyBigBlindBet(g *Game, bigBlindBet database.PokerChip, bbIdx int) { applyBlindBet(g, bbIdx, bigBlindBet, "big blind") } -func applyBlindBet(g *PokerGame, playerIdx int, bet database.PokerChip, name string) { +func applyBlindBet(g *Game, playerIdx int, bet database.PokerChip, name string) { p := g.ongoing.players[playerIdx] p.doBetAndNotif(g.db, g.pokerTableID, bet, g.roomID.Topic()) g.newLogEvent(fmt.Sprintf("%s %s %d", p.username, name, bet)) } -func autoUnsitInactivePlayers(g *PokerGame) { +func autoUnsitInactivePlayers(g *Game) { ongoing := g.ongoing pokerTableMinBet := g.PokerTableMinBet g.Players.With(func(gPlayers *seatedPlayers) { @@ -1436,7 +1436,7 @@ const ( TableType2 ) -func applyGains(g *PokerGame, playersGain []PlayerGain, mainPot, rake database.PokerChip) (winnersStr, winnerHand string) { +func applyGains(g *Game, playersGain []PlayerGain, mainPot, rake database.PokerChip) (winnersStr, winnerHand string) { ongoing := g.ongoing pokerTableID := g.pokerTableID nbPlayersGain := len(playersGain) @@ -1605,38 +1605,38 @@ func cardToPokerCard(name string) string { return r.Replace(name) } -func (g *PokerGame) OngoingPlayer(userID database.UserID) *PokerPlayer { +func (g *Game) OngoingPlayer(userID database.UserID) *PokerPlayer { if g.ongoing != nil { return g.ongoing.players.get(userID) } return nil } -func (g *PokerGame) Deal(userID database.UserID) { +func (g *Game) Deal(userID database.UserID) { roomTopic := g.roomID.Topic() roomUserTopic := g.roomID.UserTopic(userID) eligiblePlayers := g.getEligibles() if !g.IsSeated(userID) { - PokerPubSub.Pub(roomUserTopic, NewErrorMsgEvent("you need to be seated")) + PubSub.Pub(roomUserTopic, NewErrorMsgEvent("you need to be seated")) return } if len(eligiblePlayers) < 2 { - PokerPubSub.Pub(roomUserTopic, NewErrorMsgEvent("need at least 2 players")) + PubSub.Pub(roomUserTopic, NewErrorMsgEvent("need at least 2 players")) return } if !g.isGameStarted.CompareAndSwap(false, true) { - PokerPubSub.Pub(roomUserTopic, NewErrorMsgEvent("game already ongoing")) + PubSub.Pub(roomUserTopic, NewErrorMsgEvent("game already ongoing")) return } - PokerPubSub.Pub(roomUserTopic, NewErrorMsgEvent("")) - PokerPubSub.Pub(roomTopic, ResetCardsEvent{}) + PubSub.Pub(roomUserTopic, NewErrorMsgEvent("")) + PubSub.Pub(roomTopic, ResetCardsEvent{}) time.Sleep(animationTime) go dealerThread(g, eligiblePlayers) } -func (g *PokerGame) CountSeated() (count int) { +func (g *Game) CountSeated() (count int) { g.Players.RWith(func(gPlayers seatedPlayers) { for _, p := range gPlayers { if p != nil { @@ -1647,7 +1647,7 @@ func (g *PokerGame) CountSeated() (count int) { return } -var PokerPubSub = pubsub.NewPubSub[any]() +var PubSub = pubsub.NewPubSub[any]() func Refund(db *database.DkfDB) { accounts, _ := db.GetPositivePokerTableAccounts() @@ -1676,7 +1676,7 @@ func colorForCard(name string) string { return utils.Ternary(isHeartOrDiamond(name), "red", "black") } -func buildDealerTokenHtml(g *PokerGame) (html string) { +func buildDealerTokenHtml(g *Game) (html string) { html += `<div id="dealerToken"><div class="inner"></div></div>` if g.ongoing != nil { pos := dealerTokenPos[g.dealerSeatIdx.Load()] @@ -1687,7 +1687,7 @@ func buildDealerTokenHtml(g *PokerGame) (html string) { return } -func BuildPayloadHtml(g *PokerGame, authUser *database.User, payload any) (html string) { +func BuildPayloadHtml(g *Game, authUser *database.User, payload any) (html string) { switch evt := payload.(type) { case GameStartedEvent: html += drawGameStartedEvent(evt, authUser) @@ -1726,7 +1726,7 @@ func BuildPayloadHtml(g *PokerGame, authUser *database.User, payload any) (html return } -func buildGameDiv(g *PokerGame, authUser *database.User) (html string) { +func buildGameDiv(g *Game, authUser *database.User) (html string) { roomID := g.roomID html += `<div id="game">` html += `<div id="table"><div class="inner"></div><div class="cards-outline"></div></div>` @@ -1742,7 +1742,7 @@ func buildGameDiv(g *PokerGame, authUser *database.User) (html string) { return } -func BuildBaseHtml(g *PokerGame, authUser *database.User, chatRoomSlug string) (html string) { +func BuildBaseHtml(g *Game, authUser *database.User, chatRoomSlug string) (html string) { ongoing := g.ongoing roomID := g.roomID html += hutils.HtmlCssReset @@ -1803,7 +1803,7 @@ func buildCardsHtml() (html string) { return } -func buildMainPotHtml(g *PokerGame) string { +func buildMainPotHtml(g *Game) string { ongoing := g.ongoing html := `<div id="mainPot"></div>` mainPot := uint64(0) @@ -1814,7 +1814,7 @@ func buildMainPotHtml(g *PokerGame) string { return html } -func buildMinRaiseHtml(g *PokerGame) string { +func buildMinRaiseHtml(g *Game) string { ongoing := g.ongoing html := `<div id="minRaise"></div>` minRaise := uint64(0) @@ -1865,7 +1865,7 @@ func simpleTmpl(htmlTmpl string, data any) string { return buf.String() } -func buildSeatsHtml(g *PokerGame, authUser *database.User) (html string) { +func buildSeatsHtml(g *Game, authUser *database.User) (html string) { g.Players.RWith(func(gPlayers seatedPlayers) { for i := range gPlayers { html += `<div id="seat` + itoa(i+1) + `Pot" class="seatPot"></div>` @@ -1887,7 +1887,7 @@ func buildSeatsHtml(g *PokerGame, authUser *database.User) (html string) { return html } -func drawSeatsStyle(authUser *database.User, g *PokerGame) string { +func drawSeatsStyle(authUser *database.User, g *Game) string { ongoing := g.ongoing html := "<style>" seated := g.isSeated(authUser.ID) @@ -1975,7 +1975,7 @@ func buildWinnerHtml() string { return html } -func drawGameIsDoneHtml(g *PokerGame, evt GameIsDoneEvent) (html string) { +func drawGameIsDoneHtml(g *Game, evt GameIsDoneEvent) (html string) { html += `<style>` g.Players.RWith(func(gPlayers seatedPlayers) { for i, p := range gPlayers { @@ -1989,7 +1989,7 @@ func drawGameIsDoneHtml(g *PokerGame, evt GameIsDoneEvent) (html string) { return } -func drawGameIsOverHtml(g *PokerGame) (html string) { +func drawGameIsOverHtml(g *Game) (html string) { html += `<style>` html += `#dealBtn { visibility: visible; }` html += "</style>"