package wordle import ( "net/http" "gitea.konchin.com/ytshih/inp2025/game/server/middlewares" "gitea.konchin.com/ytshih/inp2025/game/types" "gitea.konchin.com/ytshih/inp2025/game/utils" "github.com/gorilla/websocket" "github.com/uptrace/bunrouter" "github.com/vmihailenco/msgpack/v5" ) func (self *handlers) WSGetState( w http.ResponseWriter, req bunrouter.Request, ) error { ctx := req.Context() c, err := upgrader.Upgrade(w, req, nil) if err != nil { return middlewares.HTTPError{ StatusCode: http.StatusInternalServerError, Message: "failed to upgrade websocket", OriginError: err, } } defer c.Close() dataCh := make(chan types.WordleState) handlers.subs = append(handlers.subs, &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) }