dkforest

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

commit 35283ee2a509f0311e06be78400965311bd157b6
parent 8f5ea42cd6376ee7ce1a51461e8db1667b7592dc
Author: n0tr1v <n0tr1v@protonmail.com>
Date:   Thu, 21 Dec 2023 20:17:00 -0500

fix possible crash

Diffstat:
Mpkg/web/handlers/poker/poker.go | 39++++++++++++++++++++++++++-------------
1 file changed, 26 insertions(+), 13 deletions(-)

diff --git a/pkg/web/handlers/poker/poker.go b/pkg/web/handlers/poker/poker.go @@ -161,6 +161,18 @@ func (p seatedPlayers) get(userID database.UserID) (out *seatedPlayer) { return } +func (g *PokerGame) getEligibles() (out seatedPlayers) { + eligiblePlayers := make(seatedPlayers, 0) + g.Players.RWith(func(gPlayers seatedPlayers) { + for _, p := range gPlayers { + if p.isEligible(g.PokerTableMinBet) { + eligiblePlayers = append(eligiblePlayers, p) + } + } + }) + return eligiblePlayers +} + type seatedPlayer struct { seatIdx int userID database.UserID @@ -558,15 +570,11 @@ func generateDeck() []string { return deck } -func newOngoing(g *PokerGame) *ongoingGame { +func newOngoing(eligiblePlayers seatedPlayers) *ongoingGame { players := make([]*pokerPlayer, 0) - g.Players.RWith(func(gPlayers seatedPlayers) { - for _, p := range gPlayers { - if p.isEligible(g.PokerTableMinBet) { - players = append(players, &pokerPlayer{seatedPlayer: p}) - } - } - }) + for _, p := range eligiblePlayers { + players = append(players, &pokerPlayer{seatedPlayer: p}) + } return &ongoingGame{ deck: generateDeck(), players: players, @@ -1001,7 +1009,11 @@ func resetPlayersBet(ongoing *ongoingGame) (sum database.PokerChip) { } func refundUncalledBet(db *database.DkfDB, ongoing *ongoingGame, pokerTableID int64, roomTopic string) { - newArray := make([]*pokerPlayer, len(ongoing.players)) + lenPlayers := len(ongoing.players) + if lenPlayers < 2 { + return + } + newArray := make([]*pokerPlayer, lenPlayers) copy(newArray, ongoing.players) sort.Slice(newArray, func(i, j int) bool { return newArray[i].getBet() > newArray[j].getBet() }) firstPlayer := newArray[0] @@ -1127,8 +1139,8 @@ func computeAllInMaxGain(ongoing *ongoingGame, newlyAllInPlayers []*pokerPlayer, } } -func dealerThread(g *PokerGame) { - g.ongoing = newOngoing(g) +func dealerThread(g *PokerGame, eligiblePlayers seatedPlayers) { + g.ongoing = newOngoing(eligiblePlayers) roomID := g.roomID roomTopic := roomID.Topic() @@ -1478,7 +1490,8 @@ func cardToPokerCard(name string) string { func (g *PokerGame) Deal(roomID RoomID, userID database.UserID) { roomTopic := roomID.Topic() roomUserTopic := roomID.UserTopic(userID) - if g.countEligibleSeated() < 2 { + eligiblePlayers := g.getEligibles() + if len(eligiblePlayers) < 2 { PokerPubSub.Pub(roomUserTopic, ErrorMsgEvent{Message: "need at least 2 players"}) return } @@ -1491,7 +1504,7 @@ func (g *PokerGame) Deal(roomID RoomID, userID database.UserID) { PokerPubSub.Pub(roomTopic, ResetCardsEvent{}) time.Sleep(animationTime) - go dealerThread(g) + go dealerThread(g, eligiblePlayers) } func (g *PokerGame) countEligibleSeated() (count int) {