package wordle import ( "net/http" "gitea.konchin.com/ytshih/inp2025/middlewares" "gitea.konchin.com/ytshih/inp2025/types" "gitea.konchin.com/ytshih/inp2025/utils" "github.com/gorilla/websocket" "github.com/uptrace/bunrouter" "github.com/vmihailenco/msgpack/v5" ) func (self *Handlers) GetState( w http.ResponseWriter, req bunrouter.Request, ) error { c, err := self.upgrader.Upgrade(w, req.Request, nil) if err != nil { return middlewares.HTTPError{ StatusCode: http.StatusInternalServerError, Message: "failed to upgrade websocket", OriginError: err, } } defer c.Close() username, _, ok := req.BasicAuth() if !ok { return middlewares.HTTPError{ StatusCode: http.StatusBadRequest, Message: "username not exist", } } dataCh := make(chan types.WordleState) self.opCh <- &OperationSubs{ Username: username, SubsCh: &dataCh, } for data := range dataCh { b, err := msgpack.Marshal(data) if err != nil { return middlewares.HTTPError{ StatusCode: http.StatusInternalServerError, Message: "failed to marshal data into msgpack", OriginError: err, } } c.WriteMessage(websocket.BinaryMessage, b) } return utils.Success(w) }