dkforest

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

commit 4df79ee89a7ee84f322a69270a20a1e18a4e4ec8
parent 20cb131965a31fac6da4f657b2ee8ec9b9f6c73f
Author: n0tr1v <n0tr1v@protonmail.com>
Date:   Tue, 19 Dec 2023 11:44:13 -0500

cleanup

Diffstat:
Mpkg/web/handlers/poker.go | 34++++++++++++++++++++++++----------
Mpkg/web/handlers/poker/poker.go | 39+++++++++++++++++++++++++++------------
2 files changed, 51 insertions(+), 22 deletions(-)

diff --git a/pkg/web/handlers/poker.go b/pkg/web/handlers/poker.go @@ -231,12 +231,19 @@ func PokerHomeHandler(c echo.Context) error { func doJoinTable(db *database.DkfDB, pokerTableSlug string, playerBuyIn database.PokerChip, userID database.UserID) error { err := db.WithE(func(tx *database.DkfDB) error { - if g := poker.PokerInstance.GetGame(poker.RoomID(pokerTableSlug)); g != nil { - g.Players.Lock() - defer g.Players.Unlock() - if g.IsSeated(userID) { - return errors.New("cannot buy-in while seated") + roomID := poker.RoomID(pokerTableSlug) + g := poker.PokerInstance.GetGame(roomID) + if g == nil { + pokerTable, err := tx.GetPokerTableBySlug(pokerTableSlug) + if err != nil { + return errors.New("failed to get poker table") } + g = poker.PokerInstance.CreateGame(tx, roomID, pokerTable.ID, pokerTable.MinBet, pokerTable.IsTest) + } + g.Players.Lock() + defer g.Players.Unlock() + if g.IsSeated(userID) { + return errors.New("cannot buy-in while seated") } pokerTable, err := tx.GetPokerTableBySlug(pokerTableSlug) if err != nil { @@ -277,12 +284,19 @@ func doJoinTable(db *database.DkfDB, pokerTableSlug string, playerBuyIn database func doCashOut(db *database.DkfDB, pokerTableSlug string, userID database.UserID) error { err := db.WithE(func(tx *database.DkfDB) error { - if g := poker.PokerInstance.GetGame(poker.RoomID(pokerTableSlug)); g != nil { - g.Players.Lock() - defer g.Players.Unlock() - if g.IsSeated(userID) { - return errors.New("cannot cash out while seated") + roomID := poker.RoomID(pokerTableSlug) + g := poker.PokerInstance.GetGame(roomID) + if g == nil { + pokerTable, err := tx.GetPokerTableBySlug(pokerTableSlug) + if err != nil { + return errors.New("failed to get poker table") } + g = poker.PokerInstance.CreateGame(tx, roomID, pokerTable.ID, pokerTable.MinBet, pokerTable.IsTest) + } + g.Players.Lock() + defer g.Players.Unlock() + if g.IsSeated(userID) { + return errors.New("cannot cash out while seated") } pokerTable, err := tx.GetPokerTableBySlug(pokerTableSlug) if err != nil { diff --git a/pkg/web/handlers/poker/poker.go b/pkg/web/handlers/poker/poker.go @@ -45,24 +45,39 @@ func NewPoker() *Poker { return p } +func (p *Poker) CreateGame(db *database.DkfDB, roomID RoomID, pokerTableID int64, + pokerTableMinBet database.PokerChip, pokerTableIsTest bool) *PokerGame { + p.Lock() + defer p.Unlock() + 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{ + db: db, + roomID: roomID, + pokerTableID: pokerTableID, + tableType: TableTypeRake, + PokerTableMinBet: pokerTableMinBet, + pokerTableIsTest: pokerTableIsTest, + playersEventCh: make(chan playerEvent), + Players: utils.NewRWMtx(make([]*seatedPlayer, NbPlayers)), + dealerSeatIdx: atomic.Int32{}, + } + g.dealerSeatIdx.Store(-1) + return g +} + func (p *Poker) GetOrCreateGame(db *database.DkfDB, roomID RoomID, pokerTableID int64, pokerTableMinBet database.PokerChip, pokerTableIsTest bool) *PokerGame { p.Lock() defer p.Unlock() g, found := p.games[roomID] if !found { - g = &PokerGame{ - db: db, - roomID: roomID, - pokerTableID: pokerTableID, - tableType: TableTypeRake, - PokerTableMinBet: pokerTableMinBet, - pokerTableIsTest: pokerTableIsTest, - playersEventCh: make(chan playerEvent), - Players: utils.NewRWMtx(make([]*seatedPlayer, NbPlayers)), - dealerSeatIdx: atomic.Int32{}, - } - g.dealerSeatIdx.Store(-1) + g = p.newGame(db, roomID, pokerTableID, pokerTableMinBet, pokerTableIsTest) p.games[roomID] = g } return g