aboutsummaryrefslogtreecommitdiffhomepage
path: root/backend/game
diff options
context:
space:
mode:
Diffstat (limited to 'backend/game')
-rw-r--r--backend/game/client.go5
-rw-r--r--backend/game/http.go9
-rw-r--r--backend/game/hub.go28
-rw-r--r--backend/game/message.go12
-rw-r--r--backend/game/ws.go3
5 files changed, 51 insertions, 6 deletions
diff --git a/backend/game/client.go b/backend/game/client.go
index 7cd66a4..fa699ce 100644
--- a/backend/game/client.go
+++ b/backend/game/client.go
@@ -12,12 +12,13 @@ type playerClient struct {
hub *gameHub
conn *websocket.Conn
s2cMessages chan playerMessageS2C
+ playerID int
}
// Receives messages from the client and sends them to the hub.
func (c *playerClient) readPump() {
defer func() {
- log.Printf("closing client")
+ log.Printf("closing player client")
c.hub.unregisterPlayer <- c
c.conn.Close()
}()
@@ -87,7 +88,7 @@ func (c *watcherClient) writePump() {
defer func() {
ticker.Stop()
c.conn.Close()
- log.Printf("closing watcher")
+ log.Printf("closing watcher client")
c.hub.unregisterWatcher <- c
}()
for {
diff --git a/backend/game/http.go b/backend/game/http.go
index beda46c..1ac77b0 100644
--- a/backend/game/http.go
+++ b/backend/game/http.go
@@ -5,6 +5,7 @@ import (
"strconv"
"github.com/labstack/echo/v4"
+ // "github.com/nsfisis/iosdc-2024-albatross/backend/auth"
)
type sockHandler struct {
@@ -18,7 +19,11 @@ func newSockHandler(hubs *GameHubs) *sockHandler {
}
func (h *sockHandler) HandleSockGolfPlay(c echo.Context) error {
- // TODO: auth
+ // user := c.Get("user").(*auth.JWTClaims)
+ // if user == nil {
+ // return echo.NewHTTPError(http.StatusUnauthorized)
+ // }
+ // TODO: check user permission
gameId := c.Param("gameId")
gameIdInt, err := strconv.Atoi(gameId)
if err != nil {
@@ -34,7 +39,7 @@ func (h *sockHandler) HandleSockGolfPlay(c echo.Context) error {
if foundHub == nil {
return echo.NewHTTPError(http.StatusNotFound, "Game not found")
}
- return servePlayerWs(foundHub, c.Response(), c.Request(), "a")
+ return servePlayerWs(foundHub, c.Response(), c.Request(), 1)
}
func (h *sockHandler) HandleSockGolfWatch(c echo.Context) error {
diff --git a/backend/game/hub.go b/backend/game/hub.go
index d4a9231..770d257 100644
--- a/backend/game/hub.go
+++ b/backend/game/hub.go
@@ -121,6 +121,14 @@ func (hub *gameHub) run() {
},
}
}
+ for watcher := range hub.watchers {
+ watcher.s2cMessages <- &watcherMessageS2CStart{
+ Type: watcherMessageTypeS2CStart,
+ Data: watcherMessageS2CStartPayload{
+ StartAt: int(startAt.Unix()),
+ },
+ }
+ }
err := hub.q.UpdateGameStartedAt(hub.ctx, db.UpdateGameStartedAtParams{
GameID: int32(hub.game.gameID),
StartedAt: pgtype.Timestamp{
@@ -151,9 +159,27 @@ func (hub *gameHub) run() {
Type: playerMessageTypeS2CExecResult,
Data: playerMessageS2CExecResultPayload{
Score: &score,
- Status: api.Success,
+ Status: api.GamePlayerMessageS2CExecResultPayloadStatusSuccess,
},
}
+ for watcher := range hub.watchers {
+ watcher.s2cMessages <- &watcherMessageS2CCode{
+ Type: watcherMessageTypeS2CCode,
+ Data: watcherMessageS2CCodePayload{
+ PlayerId: message.client.playerID,
+ Code: code,
+ },
+ }
+ watcher.s2cMessages <- &watcherMessageS2CExecResult{
+ Type: watcherMessageTypeS2CExecResult,
+ Data: watcherMessageS2CExecResultPayload{
+ PlayerId: message.client.playerID,
+ Score: &score,
+ Stdout: "",
+ Stderr: "",
+ },
+ }
+ }
default:
log.Fatalf("unexpected message type: %T", message.message)
}
diff --git a/backend/game/message.go b/backend/game/message.go
index 9116bde..bb57eb5 100644
--- a/backend/game/message.go
+++ b/backend/game/message.go
@@ -66,4 +66,16 @@ func asPlayerMessageC2S(raw map[string]json.RawMessage) (playerMessageC2S, error
}
}
+const (
+ watcherMessageTypeS2CStart = "watcher:s2c:start"
+ watcherMessageTypeS2CExecResult = "watcher:s2c:execreslut"
+ watcherMessageTypeS2CCode = "watcher:s2c:code"
+)
+
type watcherMessageS2C = interface{}
+type watcherMessageS2CStart = api.GameWatcherMessageS2CStart
+type watcherMessageS2CStartPayload = api.GameWatcherMessageS2CStartPayload
+type watcherMessageS2CCode = api.GameWatcherMessageS2CCode
+type watcherMessageS2CCodePayload = api.GameWatcherMessageS2CCodePayload
+type watcherMessageS2CExecResult = api.GameWatcherMessageS2CExecResult
+type watcherMessageS2CExecResultPayload = api.GameWatcherMessageS2CExecResultPayload
diff --git a/backend/game/ws.go b/backend/game/ws.go
index 013db7a..9a3956b 100644
--- a/backend/game/ws.go
+++ b/backend/game/ws.go
@@ -23,7 +23,7 @@ var upgrader = websocket.Upgrader{
},
}
-func servePlayerWs(hub *gameHub, w http.ResponseWriter, r *http.Request, team string) error {
+func servePlayerWs(hub *gameHub, w http.ResponseWriter, r *http.Request, playerID int) error {
conn, err := upgrader.Upgrade(w, r, nil)
if err != nil {
return err
@@ -32,6 +32,7 @@ func servePlayerWs(hub *gameHub, w http.ResponseWriter, r *http.Request, team st
hub: hub,
conn: conn,
s2cMessages: make(chan playerMessageS2C),
+ playerID: playerID,
}
hub.registerPlayer <- player