You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

44 lines
1.6 KiB

package websocket
import (
"github.com/gin-gonic/gin"
"go.uber.org/zap"
"goskeleton/app/global/consts"
"goskeleton/app/global/variable"
controllerWs "goskeleton/app/http/controller/websocket"
"goskeleton/app/http/validator/core/data_transfer"
)
type Connect struct {
Token string `form:"token" json:"token" binding:"required,min=10"`
}
// 验证器语法,参见 Register.go文件有详细说明
// 注意websocket 连接建立之前如果有错误只能在服务端同构日志输出方式记录因为使用response.Fail等函数客户端是收不到任何信息的
func (c Connect) CheckParams(context *gin.Context) {
// 1. 首先检查是否开启websocket服务配置在配置项中开启
if variable.ConfigYml.GetInt("Websocket.Start") != 1 {
variable.ZapLog.Error(consts.WsServerNotStartMsg)
return
}
//2.基本的验证规则没有通过
if err := context.ShouldBind(&c); err != nil {
variable.ZapLog.Error("客户端上线参数不合格", zap.Error(err))
return
}
extraAddBindDataContext := data_transfer.DataAddContext(c, consts.ValidatorPrefix, context)
if extraAddBindDataContext == nil {
variable.ZapLog.Error("websocket-Connect 表单验证器json化失败")
context.Abort()
return
} else {
if serviceWs, ok := (&controllerWs.Ws{}).OnOpen(extraAddBindDataContext); ok == false {
variable.ZapLog.Error(consts.WsOpenFailMsg)
} else {
(&controllerWs.Ws{}).OnMessage(serviceWs, extraAddBindDataContext) // 注意这里传递的service_ws必须是调用open返回的必须保证的ws对象的一致性
}
}
}