hotgo/server/internal/library/network/tcp/client_handle.go

80 lines
1.9 KiB
Go

// Package tcp
// @Link https://github.com/bufanyun/hotgo
// @Copyright Copyright (c) 2023 HotGo CLI
// @Author Ms <133814250@qq.com>
// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
package tcp
import (
"context"
"fmt"
"github.com/gogf/gf/v2/os/gctx"
"github.com/gogf/gf/v2/os/gtime"
"hotgo/utility/encrypt"
)
// serverLogin 心跳
func (client *Client) serverHeartbeat() {
if !client.isLogin.Val() {
return
}
ctx := gctx.New()
if err := client.conn.Send(ctx, &ServerHeartbeatReq{}); err != nil {
client.logger.Warningf(ctx, "client ServerHeartbeat Send err:%+v", err)
return
}
}
// serverLogin 服务登陆
func (client *Client) serverLogin() {
auth := client.config.Auth
// 无需登录
if auth == nil {
return
}
data := &ServerLoginReq{
Name: auth.Name,
Extra: auth.Extra,
Group: auth.Group,
AppId: auth.AppId,
Timestamp: gtime.Timestamp(),
}
// 签名
data.Sign = encrypt.Md5ToString(fmt.Sprintf("%v%v%v", data.AppId, data.Timestamp, auth.SecretKey))
ctx := gctx.New()
if err := client.conn.Send(ctx, data); err != nil {
client.logger.Warningf(ctx, "client ServerLogin Send err:%+v", err)
return
}
}
// onResponseServerLogin 接收服务登陆响应结果
func (client *Client) onResponseServerLogin(ctx context.Context, req *ServerLoginRes) {
if err := req.GetError(); err != nil {
client.isLogin.Set(false)
client.logger.Warningf(ctx, "onResponseServerLogin destroy, err:%v", err)
client.Destroy()
return
}
client.isLogin.Set(true)
if client.config.LoginEvent != nil {
client.config.LoginEvent()
}
}
// onResponseServerHeartbeat 接收心跳响应结果
func (client *Client) onResponseServerHeartbeat(ctx context.Context, req *ServerHeartbeatRes) {
if err := req.GetError(); err != nil {
client.logger.Warningf(ctx, "onResponseServerHeartbeat err:%v", err)
return
}
client.conn.Heartbeat = gtime.Timestamp()
}