Files
inp2025/server/wordle/handlers.go

66 lines
1.1 KiB
Go

package wordle
import (
"net/http"
"gitea.konchin.com/ytshih/inp2025/game/types"
"github.com/gorilla/websocket"
)
type OperationType int
const (
OperationTypeGuess OperationType = iota
)
type Operation struct {
Type OperationType
Username string
Guess string
}
type Handlers struct {
state types.WordleState
ans string
upgrader websocket.Upgrader
opCh chan Operation
subs []*chan types.WordleState
}
func NewHandlers() *Handlers {
ret := &Handlers{
upgrader: websocket.Upgrader{
ReadBufferSize: 1024,
WriteBufferSize: 1024,
CheckOrigin: func(r *http.Request) bool {
return true
},
},
subs: nil,
}
go ret.GameFlow()
return ret
}
func (self *Handlers) GameFlow() {
for op := range self.opCh {
switch op.Type {
case OperationTypeGuess:
self.state.CurrentGuess++
if self.state.CurrentGuess >= len(self.state.Users) {
for username, user := range self.state.Users {
user.History = append(user.History,
types.NewWord(op.Guess, self.ans))
self.state.Users[username] = user
}
for _, sub := range self.subs {
*sub <- self.state
}
}
}
}
}