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 } } } } }