Files
hotgo/server/internal/model/input/msgin/common.go

103 lines
2.3 KiB
Go

package msgin
import (
"fmt"
"github.com/gogf/gf/v2/errors/gerror"
"github.com/gogf/gf/v2/os/gtime"
"hotgo/internal/consts"
"hotgo/utility/encrypt"
)
type RpcMsg struct {
AppId string `json:"appID" v:"0" example:"10001" description:"应用ID"`
TraceID string `json:"traceID" v:"0" example:"d0bb93048bc5c9164cdee845dcb7f820" description:"链路ID"`
Timestamp int64 `json:"timestamp" example:"1640966400" description:"服务器时间戳"`
Sign string `json:"sign" example:"d0bb93048bc5c9164cdee845dcb7f820" description:"签名"`
}
func (i *RpcMsg) SetSign(appId, secretKey string) *RpcMsg {
i.AppId = appId
i.Timestamp = gtime.Timestamp()
i.Sign = i.GetSign(secretKey)
return i
}
func (i *RpcMsg) GetSign(secretKey string) string {
return encrypt.Md5ToString(fmt.Sprintf("%v%v%v%v", i.AppId, i.TraceID, i.Timestamp, secretKey))
}
func (i *RpcMsg) GetTraceID() string {
return i.TraceID
}
func (i *RpcMsg) SetTraceID(traceID string) {
i.TraceID = traceID
}
type Response struct {
RpcMsg
Code int `json:"code" example:"2000" description:"状态码"`
Message string `json:"message,omitempty" example:"操作成功" description:"提示消息"`
}
// PkgResponse 打包响应消息
func (m *Response) PkgResponse() {
m.SetCode()
// ...
}
// SetCode 设置状态码
func (m *Response) SetCode(code ...int) {
if len(code) > 0 {
m.Code = code[0]
return
}
// 默认值,转为成功的状态码
if m.Code == 0 {
m.Code = consts.TCPMsgCodeSuccess
}
}
// GetError 获取响应中的错误
func (m *Response) GetError() (err error) {
if m.Code != consts.TCPMsgCodeSuccess {
if m.Message == "" {
m.Message = "操作失败"
}
err = gerror.New(m.Message)
}
return
}
// ServerHeartbeat 心跳
type ServerHeartbeat struct {
}
// ResponseServerHeartbeat 响应心跳
type ResponseServerHeartbeat struct {
Response
}
// ServerLogin 服务登录
type ServerLogin struct {
RpcMsg
Group string `json:"group" description:"分组"`
Name string `json:"name" description:"名称"`
}
// ResponseServerLogin 响应服务登录
type ResponseServerLogin struct {
Response
}
// ServerOffline 服务离线
type ServerOffline struct {
RpcMsg
}
// ResponseServerOffline 响应服务离线
type ResponseServerOffline struct {
Response
}