Marco
aac428baab
1. Introduce 'usher' that opens lobbies and fills it and waits for them to be filled 2. Add global registry of all games
53 lines
1.1 KiB
Go
53 lines
1.1 KiB
Go
package chess
|
|
|
|
import (
|
|
"context"
|
|
"log"
|
|
|
|
"github.com/google/uuid"
|
|
"nhooyr.io/websocket"
|
|
)
|
|
|
|
type Player struct {
|
|
Uuid uuid.UUID
|
|
Conn *websocket.Conn
|
|
InGame bool
|
|
wsConnEstablished chan bool
|
|
context context.Context
|
|
|
|
JoinedLobby chan bool
|
|
}
|
|
|
|
type PlayerInfo struct {
|
|
PlayerID uuid.UUID `json:"playerID"`
|
|
}
|
|
|
|
func NewPlayer(uuid uuid.UUID) *Player {
|
|
return &Player{
|
|
Uuid: uuid,
|
|
Conn: nil,
|
|
InGame: false,
|
|
wsConnEstablished: make(chan bool),
|
|
JoinedLobby: make(chan bool),
|
|
}
|
|
}
|
|
|
|
func (p *Player) SetConnection(ctx context.Context, conn websocket.Conn) {
|
|
p.Conn = &conn
|
|
p.context = ctx
|
|
p.wsConnEstablished <- true
|
|
}
|
|
|
|
func (p *Player) WriteMessageToPlayer(msg []byte) error {
|
|
log.Printf("Writing message: %s to player %d", string(msg), p.Uuid)
|
|
|
|
return p.Conn.Write(p.context, websocket.MessageText, msg)
|
|
}
|
|
|
|
func (p *Player) ReadMessageFromPlayer() (websocket.MessageType, []byte, error) {
|
|
msgType, msg, err := p.Conn.Read(p.context)
|
|
log.Printf("Reading message: %s (with messagetype %d) from player %d", string(msg), msgType, p.Uuid)
|
|
|
|
return msgType, msg, err
|
|
}
|