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 gameFlow( dataCh chan types.WordleState, retCh chan error, ) { // TODO } 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) retCh := make(chan error) go gameFlow(dataCh, retCh) for { select { case err := <-retCh: if err != nil { return middlewares.HTTPError{ StatusCode: http.StatusInternalServerError, Message: "wordle server error", OriginError: err, } } break case data := <-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) }