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.
This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.
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对象的一致性
}
}
}