commit cc487e6f940be6408ba911cb42767fd452763e9d
parent dd81bbaa420a44650943161b70e4a786ea7311bc
Author: n0tr1v <n0tr1v@protonmail.com>
Date: Thu, 21 Dec 2023 12:29:23 -0500
cleanup
Diffstat:
1 file changed, 32 insertions(+), 28 deletions(-)
diff --git a/pkg/web/handlers/poker/poker.go b/pkg/web/handlers/poker/poker.go
@@ -92,7 +92,7 @@ func (p *Poker) newGame(db *database.DkfDB, roomID RoomID, pokerTableID int64,
PokerTableMinBet: pokerTableMinBet,
pokerTableIsTest: pokerTableIsTest,
playersEventCh: make(chan playerEvent),
- Players: rwmtx.New(make([]*seatedPlayer, NbPlayers)),
+ Players: rwmtx.New(make(seatedPlayers, NbPlayers)),
dealerSeatIdx: atomic.Int32{},
}
g.dealerSeatIdx.Store(-1)
@@ -130,7 +130,7 @@ var PokerInstance = newPoker()
type ongoingGame struct {
logEvents rwmtx.RWMtx[[]LogEvent]
deck []string
- players []*pokerPlayer
+ players pokerPlayers
events rwmtx.RWMtx[[]PokerEvent]
waitTurnEvent rwmtx.RWMtx[PokerWaitTurnEvent]
autoActionEvent rwmtx.RWMtx[AutoActionEvent]
@@ -139,6 +139,10 @@ type ongoingGame struct {
communityCards []string
}
+type pokerPlayers []*pokerPlayer
+
+type seatedPlayers []*seatedPlayer
+
type seatedPlayer struct {
seatIdx int
userID database.UserID
@@ -226,7 +230,7 @@ type playerCard struct {
}
type PokerGame struct {
- Players rwmtx.RWMtx[[]*seatedPlayer]
+ Players rwmtx.RWMtx[seatedPlayers]
ongoing *ongoingGame
db *database.DkfDB
roomID RoomID
@@ -410,19 +414,19 @@ func (g *ongoingGame) countAlivePlayers() (playerAlive int) {
return
}
-func (g *ongoingGame) getPlayer(userID database.UserID) *pokerPlayer {
- for _, p := range g.players {
- if p.userID == userID {
- return p
+func (p pokerPlayers) get(userID database.UserID) *pokerPlayer {
+ for _, player := range p {
+ if player.userID == userID {
+ return player
}
}
return nil
}
-func getPlayer(players []*seatedPlayer, userID database.UserID) (out *seatedPlayer) {
- for _, p := range players {
- if p != nil && p.userID == userID {
- return p
+func (p seatedPlayers) get(userID database.UserID) (out *seatedPlayer) {
+ for _, player := range p {
+ if player != nil && player.userID == userID {
+ return player
}
}
return
@@ -435,12 +439,12 @@ func (g *PokerGame) IsSeated(userID database.UserID) bool {
}
func (g *PokerGame) isSeated(userID database.UserID) (out bool) {
- g.Players.RWith(func(gPlayers []*seatedPlayer) { out = isSeated(gPlayers, userID) })
+ g.Players.RWith(func(gPlayers seatedPlayers) { out = isSeated(gPlayers, userID) })
return
}
-func isSeated(players []*seatedPlayer, userID database.UserID) bool {
- return getPlayer(players, userID) != nil
+func isSeated(players seatedPlayers, userID database.UserID) bool {
+ return players.get(userID) != nil
}
func isRoundSettled(players []*pokerPlayer) bool {
@@ -486,7 +490,7 @@ func (g *PokerGame) incrDealerIdx() (smallBlindIdx, bigBlindIdx int) {
}
func (g *PokerGame) Sit(userID database.UserID, username database.Username, pos int) {
- if err := g.Players.WithE(func(gPlayers *[]*seatedPlayer) error {
+ if err := g.Players.WithE(func(gPlayers *seatedPlayers) error {
pokerTable, err := g.db.GetPokerTableBySlug(g.roomID.String())
if err != nil {
return errors.New("failed to get poker table")
@@ -520,18 +524,18 @@ func (g *PokerGame) Sit(userID database.UserID, username database.Username, pos
}
func (g *PokerGame) UnSit(userID database.UserID) {
- g.Players.With(func(gPlayers *[]*seatedPlayer) {
- if p := getPlayer(*gPlayers, userID); p != nil {
+ g.Players.With(func(gPlayers *seatedPlayers) {
+ if p := gPlayers.get(userID); p != nil {
g.unSitPlayer(gPlayers, p)
g.newLogEvent(fmt.Sprintf("%s un-sit", p.username.String()))
}
})
}
-func (g *PokerGame) unSitPlayer(gPlayers *[]*seatedPlayer, seatedPlayer *seatedPlayer) {
+func (g *PokerGame) unSitPlayer(gPlayers *seatedPlayers, seatedPlayer *seatedPlayer) {
ongoing := g.ongoing
if ongoing != nil {
- if player := ongoing.getPlayer(seatedPlayer.userID); player != nil {
+ if player := ongoing.players.get(seatedPlayer.userID); player != nil {
g.sendUnsitPlayerEvent(player.userID)
player.unsit.Store(true)
player.folded.Store(true)
@@ -562,7 +566,7 @@ func generateDeck() []string {
func newOngoing(g *PokerGame) *ongoingGame {
players := make([]*pokerPlayer, 0)
- g.Players.RWith(func(gPlayers []*seatedPlayer) {
+ g.Players.RWith(func(gPlayers seatedPlayers) {
for _, p := range gPlayers {
if p.isEligible(g.PokerTableMinBet) {
players = append(players, &pokerPlayer{seatedPlayer: p})
@@ -1276,7 +1280,7 @@ func applyBlindBet(g *PokerGame, playerIdx int, bet database.PokerChip, name str
func autoUnsitInactivePlayers(g *PokerGame) {
ongoing := g.ongoing
pokerTableMinBet := g.PokerTableMinBet
- g.Players.With(func(gPlayers *[]*seatedPlayer) {
+ g.Players.With(func(gPlayers *seatedPlayers) {
for _, p := range *gPlayers {
if playerShouldBeBooted(p, ongoing, pokerTableMinBet) {
g.unSitPlayer(gPlayers, p)
@@ -1298,7 +1302,7 @@ func playerShouldBeBooted(p *seatedPlayer, ongoing *ongoingGame, pokerTableMinBe
if p.lastActionTS.Before(ongoing.createdAt) {
// If the player was playing the game, must be booted if he had the chance to make actions and did not.
// If the player was not playing the game, must be booted if he's not eligible to play the next one.
- op := ongoing.getPlayer(p.userID)
+ op := ongoing.players.get(p.userID)
playerShallBeBooted = (op != nil && op.countChancesToAction > 0) ||
(op == nil && !pIsEligible)
}
@@ -1499,7 +1503,7 @@ func (g *PokerGame) Deal(roomID RoomID, userID database.UserID) {
}
func (g *PokerGame) countEligibleSeated() (count int) {
- g.Players.RWith(func(gPlayers []*seatedPlayer) {
+ g.Players.RWith(func(gPlayers seatedPlayers) {
for _, p := range gPlayers {
if p.isEligible(g.PokerTableMinBet) {
count++
@@ -1510,7 +1514,7 @@ func (g *PokerGame) countEligibleSeated() (count int) {
}
func (g *PokerGame) CountSeated() (count int) {
- g.Players.RWith(func(gPlayers []*seatedPlayer) {
+ g.Players.RWith(func(gPlayers seatedPlayers) {
for _, p := range gPlayers {
if p != nil {
count++
@@ -1729,7 +1733,7 @@ func simpleTmpl(htmlTmpl string, data any) string {
}
func buildSeatsHtml(g *PokerGame, authUser *database.User) (html string) {
- g.Players.RWith(func(gPlayers []*seatedPlayer) {
+ g.Players.RWith(func(gPlayers seatedPlayers) {
for i := range gPlayers {
html += `<div id="seat` + itoa(i+1) + `Pot" class="seatPot"></div>`
}
@@ -1752,7 +1756,7 @@ func drawSeatsStyle(authUser *database.User, g *PokerGame) string {
ongoing := g.ongoing
html := "<style>"
seated := g.isSeated(authUser.ID)
- g.Players.RWith(func(players []*seatedPlayer) {
+ g.Players.RWith(func(players seatedPlayers) {
for i, p := range players {
idxStr := itoa(i + 1)
display := utils.Ternary(p != nil || seated, "none", "block")
@@ -1766,7 +1770,7 @@ func drawSeatsStyle(authUser *database.User, g *PokerGame) string {
html += fmt.Sprintf(`#seat%s .inner:before { content: "%s"; }`, idxStr, pUsername.String())
html += drawSeatCashLabel(idxStr, itoa2(p.getCash()))
if ongoing != nil {
- if op := ongoing.getPlayer(pUserID); op != nil && op.getBet() > 0 {
+ if op := ongoing.players.get(pUserID); op != nil && op.getBet() > 0 {
html += drawSeatPotLabel(idxStr, itoa2(op.getBet()))
}
}
@@ -1830,7 +1834,7 @@ func buildWinnerHtml() string {
func drawGameIsDoneHtml(g *PokerGame, evt GameIsDoneEvent) (html string) {
html += `<style>`
- g.Players.RWith(func(gPlayers []*seatedPlayer) {
+ g.Players.RWith(func(gPlayers seatedPlayers) {
for i, p := range gPlayers {
if p != nil {
html += drawSeatCashLabel(itoa(i+1), itoa2(p.getCash()))