commit 4df79ee89a7ee84f322a69270a20a1e18a4e4ec8
parent 20cb131965a31fac6da4f657b2ee8ec9b9f6c73f
Author: n0tr1v <n0tr1v@protonmail.com>
Date: Tue, 19 Dec 2023 11:44:13 -0500
cleanup
Diffstat:
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