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对象的一致性 } } }