Files
inp2025/workflows/wordleServer.go
2025-10-10 00:29:19 +08:00

48 lines
1.1 KiB
Go

package workflows
import (
"context"
"net/http"
"gitea.konchin.com/ytshih/inp2025/game/implements"
"gitea.konchin.com/ytshih/inp2025/game/server/middlewares"
"gitea.konchin.com/ytshih/inp2025/game/server/wordle"
"gitea.konchin.com/ytshih/inp2025/game/tracing"
"github.com/uptrace/bunrouter"
"go.uber.org/zap"
)
type ShutdownFunc = func()
func WordleServer(addr string) ShutdownFunc {
handlers := wordle.NewHandlers()
middlewareHandlers := middlewares.NewHandlers(
implements.NewBunDatabase(nil))
router := bunrouter.New()
apiGroup := router.NewGroup("/api").
Use(middlewareHandlers.ErrorHandler)
apiGroup.GET("/state",
handlers.WSGetState)
apiGroup.POST("/guess",
handlers.WSPostGuess)
server := &http.Server{
Addr: addr,
Handler: http.Handler(router),
}
go func() {
if err := server.ListenAndServe(); err != http.ErrServerClosed {
tracing.Logger.Error("wordle server failed", zap.Error(err))
}
}()
return func() {
if err := server.Shutdown(context.Background()); err != nil {
tracing.Logger.Error("failed to shutdown wordle server", zap.Error(err))
}
}
}