实现游戏大厅与房间模块:玩法插件化、匹配与房间生命周期管理
This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
package v1
|
||||
|
||||
import (
|
||||
"git.lzcwy.cn/zhengchiliu/zt-online-game-backend/global"
|
||||
"git.lzcwy.cn/zhengchiliu/zt-online-game-backend/internal/dto"
|
||||
"git.lzcwy.cn/zhengchiliu/zt-online-game-backend/pkg/app"
|
||||
"git.lzcwy.cn/zhengchiliu/zt-online-game-backend/pkg/errcode"
|
||||
"git.lzcwy.cn/zhengchiliu/zt-online-game-backend/pkg/lzcwyjwt"
|
||||
"github.com/gin-gonic/gin"
|
||||
"time" // 标准库:计算令牌过期时间
|
||||
)
|
||||
|
||||
// DevHandler 开发调试接口:便于跳过微信登录做联调。
|
||||
// 路由仅在 RunMode=debug 时注册(见 routers.NewRouter),生产模式不存在该入口。
|
||||
type DevHandler struct{}
|
||||
|
||||
// NewDevHandler 创建调试 handler。
|
||||
func NewDevHandler() *DevHandler {
|
||||
return &DevHandler{}
|
||||
}
|
||||
|
||||
// Token 为指定用户直接签发一对令牌。
|
||||
func (h *DevHandler) Token(c *gin.Context) {
|
||||
response := app.NewResponse(c)
|
||||
|
||||
// 二次校验:即便路由被误注册到非 debug 环境,也要挡住。
|
||||
if global.ServerSetting == nil || global.ServerSetting.RunMode != gin.DebugMode {
|
||||
response.ToErrorResponse(errcode.Forbidden)
|
||||
return
|
||||
}
|
||||
|
||||
var request dto.DevTokenRequest
|
||||
if err := c.ShouldBindQuery(&request); err != nil { // 参数解析失败
|
||||
response.ToErrorResponse(errcode.InvalidParams.WithDetails(err.Error()))
|
||||
return
|
||||
}
|
||||
if request.UserID <= 0 { // 未指定:回落为 1
|
||||
request.UserID = 1
|
||||
}
|
||||
|
||||
accessToken, refreshToken, err := lzcwyjwt.GenerateTokens(request.UserID)
|
||||
if err != nil { // 签发失败
|
||||
response.ToErrorResponse(errcode.UnauthorizedTokenGenerate)
|
||||
return
|
||||
}
|
||||
|
||||
response.ToResponse(dto.DevTokenResponse{
|
||||
AccessToken: accessToken,
|
||||
RefreshToken: refreshToken,
|
||||
ExpireTime: time.Now().Unix() + int64(global.JWTSetting.AccessTokenExpire),
|
||||
})
|
||||
}
|
||||
@@ -3,6 +3,7 @@ package routers
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
"git.lzcwy.cn/zhengchiliu/zt-online-game-backend/global"
|
||||
"git.lzcwy.cn/zhengchiliu/zt-online-game-backend/internal/middleware"
|
||||
v1 "git.lzcwy.cn/zhengchiliu/zt-online-game-backend/internal/routers/api/v1"
|
||||
"git.lzcwy.cn/zhengchiliu/zt-online-game-backend/internal/wsgateway"
|
||||
@@ -49,5 +50,17 @@ func NewRouter() *gin.Engine {
|
||||
auth.POST("/user/avatar/upload", userHandler.AvatarUpload)
|
||||
}
|
||||
|
||||
// ===== 开发调试路由(仅 debug 模式注册)=====
|
||||
// 1) /api/v1/dev/token:跳过微信登录直接换取令牌,便于联调
|
||||
// 2) /test:WebSocket 联调页面(单页面双开两个玩家)
|
||||
if global.ServerSetting != nil && global.ServerSetting.RunMode == gin.DebugMode {
|
||||
devHandler := v1.NewDevHandler()
|
||||
apiV1.GET("/dev/token", devHandler.Token)
|
||||
|
||||
r.GET("/test", func(c *gin.Context) {
|
||||
c.File("web/ws-test.html") // 相对工作目录(项目根)读取静态页面
|
||||
})
|
||||
}
|
||||
|
||||
return r
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user