Files
justthefrax/host.go
Justin C. Miller ad8e570205 Web app first pass
2024-09-03 00:55:35 -07:00

64 lines
1.0 KiB
Go

package main
import (
"fmt"
"log"
"net/http"
)
type Host struct {
Client
}
func (h *Host) getClient() *Client { return &h.Client }
func (h *Host) String() string { return "Host" }
func (h *Host) finish() {
h.Client.game.unregisterHost <- h
}
type ActivateMessage struct {
Player uint `json:"player"`
Story string `json:"story"`
}
func (h *Host) handleMessage(env GameMessage) error {
game := h.Client.game
switch env.Type {
case "activate":
m, err := parseSubMessage[ActivateMessage](env.Message)
if err != nil {
return err
}
player, ok := game.players[m.Player]
if !ok {
return fmt.Errorf("No Player %d", m.Player)
}
player.activate(m.Story)
return nil
default:
return fmt.Errorf("Unknown message %s", env.Type)
}
}
func serveHostWs(game *Game, w http.ResponseWriter, r *http.Request) {
conn, err := upgrader.Upgrade(w, r, nil)
if err != nil {
log.Println(err)
return
}
host := &Host{
Client: newClient(game, conn),
}
game.registerHost <- host
go writePump(host)
go readPump(host)
}