dreamfactory_cmd/cmd/v2/service/pttService.go
2023-06-09 21:58:02 +08:00

125 lines
3.2 KiB
Go

package service
import (
"go_dreamfactory/cmd/v2/lib/common"
"go_dreamfactory/cmd/v2/service/observer"
// "go_dreamfactory/modules/user"
"go_dreamfactory/pb"
"time"
"github.com/sirupsen/logrus"
"google.golang.org/protobuf/proto"
)
var (
ptt PttService
)
type PttService interface {
Login(sid, account string) (errdata *pb.ErrorData)
CreateRole(nickName string, gender, figure int32) (errdata *pb.ErrorData)
GetUser() *UserInfo
SetUser(dbUser *pb.DBUser, dbUserExpand *pb.DBUserExpand)
SendToClient(mainType, subType string, rsp proto.Message) error
Ping(sid, account string)
}
type PttServiceImpl struct {
connService ConnService
user *UserInfo
obs observer.Observer
}
type UserInfo struct {
DbUser *pb.DBUser
DbUserExpand *pb.DBUserExpand
}
func NewPttService(connService ConnService, obs observer.Observer) PttService {
ptt = &PttServiceImpl{
connService: connService,
obs: obs,
}
return ptt
}
func GetPttService() PttService {
return ptt
}
func (p *PttServiceImpl) GetUser() *UserInfo {
return p.user
}
func (p *PttServiceImpl) SetUser(dbUser *pb.DBUser, dbUserExpand *pb.DBUserExpand) {
p.user = &UserInfo{DbUser: dbUser, DbUserExpand: dbUserExpand}
}
func (p *PttServiceImpl) SendToClient(mainType, subType string, rsp proto.Message) (err error) {
msg := &pb.UserMessage{MainType: mainType, SubType: subType}
msg.Sec = common.BuildSecStr(p.user.DbUser.Sid, p.user.DbUser.Binduid)
now := time.Now()
if err = p.connService.SendMsg(msg, rsp); err != nil {
logrus.WithField("发送错误:", err).Error(err)
return err
}
p.obs.Notify(observer.EVENT_RST, now)
return
}
// Login
func (p *PttServiceImpl) Login(sid, account string) (errdata *pb.ErrorData) {
head := &pb.UserMessage{MainType: string("user"), SubType: "login"}
head.Sec = common.BuildSecStr(sid, account)
req := &pb.UserLoginReq{
Account: account,
Sid: sid,
}
if err := p.connService.SendMsg(head, req); err != nil {
errdata = &pb.ErrorData{
Code: pb.ErrorCode_SystemError,
}
logrus.WithField("err", err).Error("Login")
return
}
logrus.WithFields(logrus.Fields{common.MainType: string("user"), common.SubType: "login",
common.Params: req}).Info("登录")
return
}
func (p *PttServiceImpl) Ping(sid, account string) {
defer func() {
if err := recover(); err != nil {
logrus.Errorf("Ping sid:%v account:%v err:%v", sid, account, err)
}
}()
head := &pb.UserMessage{MainType: string("gateway"), SubType: "heartbeat"}
head.Sec = common.BuildSecStr(sid, account)
if err := p.connService.SendMsg(head, &pb.GatewayHeartbeatReq{}); err != nil {
p.obs.Notify(observer.EVENT_PING, err)
return
}
// logrus.Debug("Ping")
return
}
// create role
func (p *PttServiceImpl) CreateRole(nickName string, gender, figure int32) (errdata *pb.ErrorData) {
head := &pb.UserMessage{MainType: string("user"), SubType: "create"}
head.Sec = common.BuildSecStr(p.user.DbUser.Sid, p.user.DbUser.Binduid)
if err := p.connService.SendMsg(head, &pb.UserCreateReq{
NickName: nickName,
Figure: figure,
Gender: gender,
}); err != nil {
errdata = &pb.ErrorData{
Code: pb.ErrorCode_SystemError,
}
logrus.WithField("err", err).Error("CreateRole")
return
}
return
}