64 lines
1.0 KiB
Go
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)
|
|
}
|