commit df117837339c3eb680a36569ab414e3c37abd8fa
parent 887476925b40491a3647b75f86d4358d32fe9dc1
Author: n0tr1v <n0tr1v@protonmail.com>
Date: Mon, 18 Dec 2023 04:01:54 -0500
cleanup
Diffstat:
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()))
}