实现游戏大厅与房间模块:玩法插件化、匹配与房间生命周期管理

This commit is contained in:
2026-09-28 00:10:11 +08:00
parent 99d1827262
commit fb5a730ef3
19 changed files with 2492 additions and 18 deletions
+52
View File
@@ -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),
})
}