commit 25f4ddb7a12b80e6dba0608e2c8d0d40b7ef3b02
parent 483a2d951394813b1ede9a3a88a635bc92f6446c
Author: n0tr1v <n0tr1v@protonmail.com>
Date: Mon, 4 Dec 2023 15:18:26 -0500
poker
Diffstat:
1 file changed, 59 insertions(+), 26 deletions(-)
diff --git a/pkg/web/handlers/handlers.go b/pkg/web/handlers/handlers.go
@@ -799,11 +799,15 @@ type PokerEvent struct {
type PokerSeatTakenEvent struct {
}
-var PokerPubSub = pubsub.NewPubSub[PokerEvent]()
+type PokerSeatLeftEvent struct {
+}
+
+var PokerPubSub = pubsub.NewPubSub[any]()
func PokerSitHandler(c echo.Context) error {
authUser := c.Get("authUser").(*database.User)
pos, _ := strconv.Atoi(c.Param("pos"))
+ pos--
roomID := c.Param("roomID")
PokerInstance.Lock()
g, found := PokerInstance.Games[roomID]
@@ -816,9 +820,9 @@ func PokerSitHandler(c echo.Context) error {
fmt.Println("seat already taken")
return c.NoContent(http.StatusNotFound)
}
- myTopic := "room_" + authUser.ID.String() + "_seats"
+ myTopic := "room_" + roomID
g.Players[pos] = authUser.Username.String()
- PokerPubSub.Pub(myTopic, PokerEvent{})
+ PokerPubSub.Pub(myTopic, PokerSeatTakenEvent{})
return c.HTML(http.StatusOK, ``)
}
return c.HTML(http.StatusOK, `<form method="post"><button>SIT</button></form>`)
@@ -851,8 +855,7 @@ func PokerHandler(c echo.Context) error {
deckSha256 := utils.Sha256([]byte(deckStr))
quit := hutils.CloseSignalChan(c)
- myTopic := "room_" + authUser.ID.String()
- myTopic1 := "room_" + authUser.ID.String() + "_seats"
+ myTopic := "room_" + roomID
go func() {
type Seat struct {
@@ -1015,7 +1018,7 @@ func PokerHandler(c echo.Context) error {
})
}()
- sub := PokerPubSub.Subscribe([]string{myTopic, myTopic1})
+ sub := PokerPubSub.Subscribe([]string{myTopic})
defer sub.Close()
c.Response().Header().Set(echo.HeaderContentType, echo.MIMETextHTMLCharsetUTF8)
@@ -1084,6 +1087,9 @@ body {
width: 100px;
height: 50px;
}
+#seat1 { position: absolute; top: 80px; left: 700px; }
+#seat2 { position: absolute; top: 200px; left: 670px; }
+#seat3 { position: absolute; top: 300px; left: 610px; }
.takeSeat1 { position: absolute; top: 80px; left: 700px; }
.takeSeat2 { position: absolute; top: 200px; left: 670px; }
.takeSeat3 { position: absolute; top: 300px; left: 610px; }
@@ -1107,6 +1113,13 @@ body {
}
}
send(takeSeatBtns)
+ seats := `
+<div>
+ <div id="seat1"></div>
+ <div id="seat2"></div>
+ <div id="seat3"></div>
+</div>`
+ send(seats)
turnAction := `
<div style="position: absolute; top: 400px; left: 200px;">
<form><input type="number" /><button>Bet</button></form>
@@ -1127,7 +1140,7 @@ Loop:
default:
}
- topic, payload, err := sub.ReceiveTimeout2(1*time.Second, quit)
+ _, payload, err := sub.ReceiveTimeout2(1*time.Second, quit)
if err != nil {
if errors.Is(err, pubsub.ErrCancelled) {
break Loop
@@ -1135,27 +1148,45 @@ Loop:
continue
}
- if topic == myTopic1 {
- send(`<style>.takeSeat { display: none; }</style>`)
+ if _, ok := payload.(PokerSeatTakenEvent); ok {
+
+ isSeated := false
+ for _, p := range g.Players {
+ if p == authUser.Username.String() {
+ isSeated = true
+ break
+ }
+ }
+ if isSeated {
+ send(`<style>.takeSeat { display: none; }</style>`)
+ }
+
+ for i, p := range g.Players {
+ if p != "" {
+ send(`<style>.takeSeat` + strconv.Itoa(i+1) + ` { display: none; }</style>`)
+ send(`<style>#seat` + strconv.Itoa(i+1) + `:before { content: "` + p + `"; }</style>`)
+ } else {
+ send(`<style>#seat` + strconv.Itoa(i+1) + `:before { content: ""; }</style>`)
+ }
+ }
c.Response().Flush()
- fmt.Println(g.Players)
continue
- }
- color := "black"
- if strings.Contains(payload.Name, "♥") ||
- strings.Contains(payload.Name, "♦") {
- color = "red"
- }
- transform := `transform: translate(` + strconv.Itoa(payload.Left) + `px, ` + strconv.Itoa(payload.Top) + `px)`
- if payload.Angle != "" {
- transform += ` rotateZ(` + payload.Angle + `)`
- }
- if payload.Burn {
- transform += ` rotateY(180deg)`
- }
- transform += ";"
- send(`<style>
+ } else if payload, ok := payload.(PokerEvent); ok {
+ color := "black"
+ if strings.Contains(payload.Name, "♥") ||
+ strings.Contains(payload.Name, "♦") {
+ color = "red"
+ }
+ transform := `transform: translate(` + strconv.Itoa(payload.Left) + `px, ` + strconv.Itoa(payload.Top) + `px)`
+ if payload.Angle != "" {
+ transform += ` rotateZ(` + payload.Angle + `)`
+ }
+ if payload.Burn {
+ transform += ` rotateY(180deg)`
+ }
+ transform += ";"
+ send(`<style>
#` + payload.ID + ` {
z-index: ` + strconv.Itoa(payload.Idx) + `;
transition: 1s ease-in-out;
@@ -1163,7 +1194,9 @@ Loop:
}
#` + payload.ID + ` .card .inner:before { content: "` + payload.Name + `"; color: ` + color + `; }
</style>`)
- c.Response().Flush()
+ c.Response().Flush()
+ }
}
+ //PokerPubSub.Pub(myTopic, PokerEvent{})
return nil
}