commit 4b5fd8682ad6230e06cc5cee5fb2ce5e8bbad3d5
parent d7e004a71b3258074343c66378495c41a6a1a46f
Author: n0tr1v <n0tr1v@protonmail.com>
Date: Tue, 19 Dec 2023 01:01:35 -0500
cleanup
Diffstat:
3 files changed, 94 insertions(+), 98 deletions(-)
diff --git a/pkg/web/handlers/poker.go b/pkg/web/handlers/poker.go
@@ -22,6 +22,7 @@ import (
"image/png"
"math/rand"
"net/http"
+ "strconv"
"strings"
"time"
)
@@ -507,3 +508,52 @@ func PokerFoldHandler(c echo.Context) error {
}
return c.HTML(http.StatusOK, hutils.HtmlCssReset+`<form method="post"><button>Fold</button></form>`)
}
+
+func PokerDealHandler(c echo.Context) error {
+ roomID := poker.RoomID(c.Param("roomID"))
+ authUser := c.Get("authUser").(*database.User)
+ g := poker.PokerInstance.GetGame(roomID)
+ if g == nil {
+ return c.NoContent(http.StatusNotFound)
+ }
+ if c.Request().Method == http.MethodPost {
+ g.Deal(roomID, authUser)
+ }
+ html := hutils.HtmlCssReset
+ html += `<form method="post"><button>Deal</button></form>`
+ return c.HTML(http.StatusOK, html)
+}
+
+func PokerUnSitHandler(c echo.Context) error {
+ authUser := c.Get("authUser").(*database.User)
+ roomID := poker.RoomID(c.Param("roomID"))
+ html := hutils.HtmlCssReset + `<form method="post"><button>UnSit</button></form>`
+ g := poker.PokerInstance.GetGame(roomID)
+ if g == nil {
+ return c.NoContent(http.StatusNotFound)
+ }
+ if c.Request().Method == http.MethodPost {
+ g.UnSitPlayer(authUser.ID)
+ }
+ return c.HTML(http.StatusOK, html)
+}
+
+func PokerSitHandler(c echo.Context) error {
+ html := hutils.HtmlCssReset + `<form method="post"><button>Sit</button></form>`
+ authUser := c.Get("authUser").(*database.User)
+ pos, _ := strconv.Atoi(c.Param("pos"))
+ if pos < 1 || pos > poker.NbPlayers {
+ return c.HTML(http.StatusOK, html)
+ }
+ pos--
+ roomID := poker.RoomID(c.Param("roomID"))
+ g := poker.PokerInstance.GetGame(roomID)
+ if g == nil {
+ return c.HTML(http.StatusOK, html)
+ }
+
+ if c.Request().Method == http.MethodPost {
+ g.Sit(authUser.ID, authUser.Username, pos)
+ }
+ return c.HTML(http.StatusOK, html)
+}
diff --git a/pkg/web/handlers/poker/poker.go b/pkg/web/handlers/poker/poker.go
@@ -8,11 +8,9 @@ import (
"errors"
"fmt"
"github.com/chehsunliu/poker"
- "github.com/labstack/echo"
"github.com/sirupsen/logrus"
"math"
"math/rand"
- "net/http"
"sort"
"strconv"
"strings"
@@ -455,7 +453,40 @@ func (g *PokerGame) incrDealerIdx() (smallBlindIdx, bigBlindIdx int) {
return
}
-func (g *PokerGame) UnSitPlayer(userID database.UserID) error {
+func (g *PokerGame) Sit(userID database.UserID, username database.Username, pos int) {
+ pokerTable, err := g.db.GetPokerTableBySlug(g.roomID.String())
+ tableID := pokerTable.ID
+ if err != nil {
+ return
+ }
+
+ if err := g.Players.WithE(func(gPlayers *[]*SeatedPlayer) error {
+ tableAccount, err := g.db.GetPokerTableAccount(userID, 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 isSeated(*gPlayers, userID) {
+ return errors.New("player already seated")
+ }
+ if (*gPlayers)[pos] != nil {
+ return errors.New("seat already taken")
+ }
+ (*gPlayers)[pos] = &SeatedPlayer{SeatIdx: pos, UserID: userID, Username: username, Cash: utils.NewRWMtx(tableAccount.Amount), LastActionTS: time.Now()}
+
+ PokerPubSub.Pub(g.roomID.Topic(), PokerSeatTakenEvent{})
+ g.newLogEvent(fmt.Sprintf("%s sit", username.String()))
+
+ return nil
+ }); err != nil {
+ PokerPubSub.Pub(g.roomID.UserTopic(userID), ErrorMsgEvent{Message: err.Error()})
+ return
+ }
+}
+
+func (g *PokerGame) UnSitPlayer(userID database.UserID) {
ongoing := g.Ongoing
if ongoing != nil {
if p := ongoing.getPlayer(userID); p != nil {
@@ -463,15 +494,15 @@ func (g *PokerGame) UnSitPlayer(userID database.UserID) error {
}
}
- err := g.Players.WithE(func(gPlayers *[]*SeatedPlayer) error {
+ g.Players.With(func(gPlayers *[]*SeatedPlayer) {
p := getPlayer(*gPlayers, userID)
if p == nil {
- return errors.New("player is not sit")
+ return
}
g.unSitPlayer1(gPlayers, p)
- return nil
+ PokerPubSub.Pub(g.roomID.Topic(), PokerSeatLeftEvent{})
+ g.newLogEvent(fmt.Sprintf("%s un-sit", p.Username.String()))
})
- return err
}
func (g *PokerGame) unSitPlayer1(gPlayers *[]*SeatedPlayer, seatedPlayer *SeatedPlayer) {
@@ -1463,90 +1494,6 @@ func (r RoomID) UserTopic(userID database.UserID) string {
return r.Topic() + "_" + userID.String()
}
-func PokerDealHandler(c echo.Context) error {
- roomID := RoomID(c.Param("roomID"))
- authUser := c.Get("authUser").(*database.User)
- g := PokerInstance.GetGame(roomID)
- if g == nil {
- return c.NoContent(http.StatusNotFound)
- }
- if c.Request().Method == http.MethodPost {
- g.Deal(roomID, authUser)
- }
- html := hutils.HtmlCssReset
- html += `<form method="post"><button>Deal</button></form>`
- return c.HTML(http.StatusOK, html)
-}
-
-func PokerUnSitHandler(c echo.Context) error {
- authUser := c.Get("authUser").(*database.User)
- roomID := RoomID(c.Param("roomID"))
- html := hutils.HtmlCssReset + `<form method="post"><button>UnSit</button></form>`
- roomTopic := roomID.Topic()
- g := PokerInstance.GetGame(roomID)
- if g == nil {
- return c.NoContent(http.StatusNotFound)
- }
- if c.Request().Method == http.MethodPost {
- if err := g.UnSitPlayer(authUser.ID); err == nil {
- PokerPubSub.Pub(roomTopic, PokerSeatLeftEvent{})
- g.newLogEvent(fmt.Sprintf("%s un-sit", authUser.Username.String()))
- }
- }
- return c.HTML(http.StatusOK, html)
-}
-
-func PokerSitHandler(c echo.Context) error {
- db := c.Get("database").(*database.DkfDB)
- html := hutils.HtmlCssReset + `<form method="post"><button>Sit</button></form>`
- authUser := c.Get("authUser").(*database.User)
- pos, _ := strconv.Atoi(c.Param("pos"))
- if pos < 1 || pos > NbPlayers {
- return c.HTML(http.StatusOK, html)
- }
- pos--
- roomID := RoomID(c.Param("roomID"))
- roomTopic := roomID.Topic()
- roomUserTopic := roomID.UserTopic(authUser.ID)
- g := PokerInstance.GetGame(roomID)
- if g == nil {
- return c.HTML(http.StatusOK, html)
- }
-
- if c.Request().Method == http.MethodPost {
- pokerTable, err := db.GetPokerTableBySlug(roomID.String())
- tableID := pokerTable.ID
- if err != nil {
- return c.HTML(http.StatusOK, html)
- }
-
- 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 isSeated(*gPlayers, authUser.ID) {
- 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()))
- }
- return c.HTML(http.StatusOK, html)
-}
-
func isHeartOrDiamond(name string) bool {
return strings.Contains(name, "♥") ||
strings.Contains(name, "♦")
diff --git a/pkg/web/web.go b/pkg/web/web.go
@@ -11,7 +11,6 @@ import (
"dkforest/pkg/web/clientFrontends"
"dkforest/pkg/web/handlers"
v1 "dkforest/pkg/web/handlers/api/v1"
- "dkforest/pkg/web/handlers/poker"
"dkforest/pkg/web/middlewares"
"fmt"
"github.com/labstack/echo"
@@ -111,12 +110,12 @@ func getMainServer(db *database.DkfDB, i18nBundle *i18n.Bundle, renderer *tmp.Te
authGroup.POST("/poker/:roomID/call", handlers.PokerCallHandler)
authGroup.GET("/poker/:roomID/bet", handlers.PokerBetHandler)
authGroup.POST("/poker/:roomID/bet", handlers.PokerBetHandler)
- authGroup.GET("/poker/:roomID/deal", poker.PokerDealHandler)
- authGroup.POST("/poker/:roomID/deal", poker.PokerDealHandler)
- authGroup.GET("/poker/:roomID/unsit", poker.PokerUnSitHandler)
- authGroup.POST("/poker/:roomID/unsit", poker.PokerUnSitHandler)
- authGroup.GET("/poker/:roomID/sit/:pos", poker.PokerSitHandler)
- authGroup.POST("/poker/:roomID/sit/:pos", poker.PokerSitHandler)
+ authGroup.GET("/poker/:roomID/deal", handlers.PokerDealHandler)
+ authGroup.POST("/poker/:roomID/deal", handlers.PokerDealHandler)
+ authGroup.GET("/poker/:roomID/unsit", handlers.PokerUnSitHandler)
+ authGroup.POST("/poker/:roomID/unsit", handlers.PokerUnSitHandler)
+ authGroup.GET("/poker/:roomID/sit/:pos", handlers.PokerSitHandler)
+ authGroup.POST("/poker/:roomID/sit/:pos", handlers.PokerSitHandler)
authGroup.GET("/chess", handlers.ChessHandler)
authGroup.POST("/chess", handlers.ChessHandler)
authGroup.GET("/chess/analyze", handlers.ChessAnalyzeHandler)