dkforest

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

commit 446d3283587a7f0e2097cb88210c2c9d24b5a5c4
parent e4b60285297a9a4d1bc3f83083b824b34c899176
Author: n0tr1v <n0tr1v@protonmail.com>
Date:   Thu,  7 Dec 2023 06:07:01 -0500

cleanup

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

diff --git a/pkg/web/handlers/poker/poker.go b/pkg/web/handlers/poker/poker.go @@ -125,6 +125,36 @@ type PokerGame struct { IsGameOver atomic.Bool } +func (g *Ongoing) computeWinners() (winner *PokerPlayer, winnerHand string) { + var minScore int32 = math.MaxInt32 + for _, p := range g.Players { + + p.CardsMtx.RLock() + playerCard1 := p.Cards[0].Name + playerCard2 := p.Cards[1].Name + p.CardsMtx.RUnlock() + + hand := []poker.Card{ + poker.NewCard(cardToPokerCard(g.CommunityCards[0])), + poker.NewCard(cardToPokerCard(g.CommunityCards[1])), + poker.NewCard(cardToPokerCard(g.CommunityCards[2])), + poker.NewCard(cardToPokerCard(g.CommunityCards[3])), + poker.NewCard(cardToPokerCard(g.CommunityCards[4])), + poker.NewCard(cardToPokerCard(playerCard1)), + poker.NewCard(cardToPokerCard(playerCard2)), + } + e := poker.Evaluate(hand) + // TODO: handle split pot + // TODO: handle all-in side pots + if e < minScore { + winner = p + minScore = e + winnerHand = poker.RankString(e) + } + } + return winner, winnerHand +} + func (g *Ongoing) AddEvent(evts ...PokerEvent) { g.EventsMtx.Lock() defer g.EventsMtx.Unlock() @@ -461,7 +491,6 @@ func dealerThread(db *database.DkfDB, g *PokerGame, roomID string) { roomLogsTopic := "room_" + roomID + "_logs" var winner *PokerPlayer var winnerHand string - var minScore int32 = math.MaxInt32 g.incrDealerIdx() @@ -640,31 +669,7 @@ func dealerThread(db *database.DkfDB, g *PokerGame, roomID string) { } } - for _, p := range g.Ongoing.Players { - - p.CardsMtx.RLock() - playerCard1 := p.Cards[0].Name - playerCard2 := p.Cards[1].Name - p.CardsMtx.RUnlock() - - hand := []poker.Card{ - poker.NewCard(cardToPokerCard(g.Ongoing.CommunityCards[0])), - poker.NewCard(cardToPokerCard(g.Ongoing.CommunityCards[1])), - poker.NewCard(cardToPokerCard(g.Ongoing.CommunityCards[2])), - poker.NewCard(cardToPokerCard(g.Ongoing.CommunityCards[3])), - poker.NewCard(cardToPokerCard(g.Ongoing.CommunityCards[4])), - poker.NewCard(cardToPokerCard(playerCard1)), - poker.NewCard(cardToPokerCard(playerCard2)), - } - e := poker.Evaluate(hand) - // TODO: handle split pot - // TODO: handle all-in side pots - if e < minScore { - winner = p - minScore = e - winnerHand = poker.RankString(e) - } - } + winner, winnerHand = g.Ongoing.computeWinners() END: