dkforest

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

commit df117837339c3eb680a36569ab414e3c37abd8fa
parent 887476925b40491a3647b75f86d4358d32fe9dc1
Author: n0tr1v <n0tr1v@protonmail.com>
Date:   Mon, 18 Dec 2023 04:01:54 -0500

cleanup

Diffstat:
Mpkg/database/database.go | 2+-
Mpkg/utils/utils.go | 9++++++++-
Mpkg/web/handlers/poker/poker.go | 42+++++++++++++++++++-----------------------
3 files changed, 28 insertions(+), 25 deletions(-)

diff --git a/pkg/database/database.go b/pkg/database/database.go @@ -337,7 +337,7 @@ func Backup() error { } func (d *DkfDB) With(clb func(tx *DkfDB)) { - d.WithE(func(tx *DkfDB) error { + _ = d.WithE(func(tx *DkfDB) error { clb(tx) return nil }) diff --git a/pkg/utils/utils.go b/pkg/utils/utils.go @@ -1206,7 +1206,14 @@ func (m *RWMtx[T]) RWith(clb func(v *T)) { } func (m *RWMtx[T]) With(clb func(v *T)) { + _ = m.WithE(func(tx *T) error { + clb(tx) + return nil + }) +} + +func (m *RWMtx[T]) WithE(clb func(v *T) error) error { m.Lock() defer m.Unlock() - clb(&m.v) + return clb(&m.v) } diff --git a/pkg/web/handlers/poker/poker.go b/pkg/web/handlers/poker/poker.go @@ -442,19 +442,6 @@ func (g *PokerGame) UnSitPlayer1(seatedPlayer *SeatedPlayer) error { return nil } -func (g *PokerGame) SitPlayer(authUser *database.User, pos int, chips database.PokerChip) error { - g.Players.Lock() - defer g.Players.Unlock() - if g.isSeated(authUser.Username) { - return errors.New("player already seated") - } - if (*g.Players.Val())[pos] != nil { - return errors.New("seat already taken") - } - (*g.Players.Val())[pos] = &SeatedPlayer{SeatIdx: pos, UserID: authUser.ID, Username: authUser.Username, Cash: utils.NewRWMtx(chips), LastActionTS: time.Now()} - return nil -} - func generateDeck() []string { deck := []string{ "A♠", "2♠", "3♠", "4♠", "5♠", "6♠", "7♠", "8♠", "9♠", "10♠", "J♠", "Q♠", "K♠", @@ -1511,19 +1498,28 @@ func PokerSitHandler(c echo.Context) error { if err != nil { return c.HTML(http.StatusOK, html) } - tableAccount, err := db.GetPokerTableAccount(authUser.ID, tableID) - if err != nil { - logrus.Error(err) - return c.HTML(http.StatusOK, html) - } - if tableAccount.Amount < pokerTable.MinBet { - PokerPubSub.Pub(roomUserTopic, ErrorMsgEvent{Message: fmt.Sprintf("not enough chips to sit. have: %d, need: %d", tableAccount.Amount, pokerTable.MinBet)}) - return c.HTML(http.StatusOK, html) - } - if err := g.SitPlayer(authUser, pos, tableAccount.Amount); err != nil { + + if err := g.Players.WithE(func(gPlayers *[]*SeatedPlayer) error { + tableAccount, err := db.GetPokerTableAccount(authUser.ID, tableID) + if err != nil { + return errors.New("failed to get table account") + } + if tableAccount.Amount < pokerTable.MinBet { + return errors.New(fmt.Sprintf("not enough chips to sit. have: %d, need: %d", tableAccount.Amount, pokerTable.MinBet)) + } + if g.isSeated(authUser.Username) { + return errors.New("player already seated") + } + if (*gPlayers)[pos] != nil { + return errors.New("seat already taken") + } + (*gPlayers)[pos] = &SeatedPlayer{SeatIdx: pos, UserID: authUser.ID, Username: authUser.Username, Cash: utils.NewRWMtx(tableAccount.Amount), LastActionTS: time.Now()} + return nil + }); err != nil { PokerPubSub.Pub(roomUserTopic, ErrorMsgEvent{Message: err.Error()}) return c.HTML(http.StatusOK, html) } + PokerPubSub.Pub(roomTopic, PokerSeatTakenEvent{}) g.newLogEvent(fmt.Sprintf("%s sit", authUser.Username.String())) }