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