package service import ( "go_dreamfactory/cmd/v2/lib/common" "go_dreamfactory/comm" "go_dreamfactory/modules/user" "go_dreamfactory/pb" "github.com/sirupsen/logrus" "google.golang.org/protobuf/proto" ) var ( ptt PttService ) type PttService interface { Login(sid int32, account string) (code pb.ErrorCode, rsp *pb.UserLoginResp) CreateRole(nickName string) (code pb.ErrorCode, rsp *pb.UserCreateResp) GetUser() *UserInfo SetUser(dbUser *pb.DBUser, dbUserExpand *pb.DBUserExpand) SendToClient(mainType, subType string, rsp proto.Message) error } type PttServiceImpl struct { connService ConnService user *UserInfo } type UserInfo struct { DbUser *pb.DBUser DbUserExpand *pb.DBUserExpand } func NewPttService(connService ConnService) PttService { ptt = &PttServiceImpl{ connService: connService, } 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) if err = p.connService.SendMsg(msg, rsp); err != nil { logrus.WithField("err", err).Error(err) } return } // Login func (p *PttServiceImpl) Login(sid int32, account string) (code pb.ErrorCode, rsp *pb.UserLoginResp) { head := &pb.UserMessage{MainType: string(comm.ModuleUser), SubType: user.UserSubTypeLogin} head.Sec = common.BuildSecStr(sid, account) if err := p.connService.SendMsg(head, &pb.UserLoginReq{ Account: account, Sid: sid, }); err != nil { code = pb.ErrorCode_SystemError logrus.WithField("err", err).Error("Login") return } //respone for { if cd, msg := p.connService.ReceiveMsg(); cd != pb.ErrorCode_Success { code = cd break } else { //suc rsp = &pb.UserLoginResp{} if msg.MainType == string(comm.ModuleUser) && msg.SubType == user.UserSubTypeLogin { if !comm.ProtoUnmarshal(msg, rsp) { code = pb.ErrorCode_PbError return } break } } } return } // create role func (p *PttServiceImpl) CreateRole(nickName string) (code pb.ErrorCode, rsp *pb.UserCreateResp) { head := &pb.UserMessage{MainType: string(comm.ModuleUser), SubType: user.UserSubTypeCreate} head.Sec = common.BuildSecStr(p.user.DbUser.Sid, p.user.DbUser.Binduid) if err := p.connService.SendMsg(head, &pb.UserCreateReq{ NickName: nickName, }); err != nil { code = pb.ErrorCode_SystemError logrus.WithField("err", err).Error("CreateRole") return } //response // for { // if cd, msg := p.connService.ReceiveMsg(); cd != pb.ErrorCode_Success { // code = cd // break // } else { // rsp = &pb.UserCreateResp{} // if msg.MainType == string(comm.ModuleUser) && msg.SubType == user.UserSubTypeCreate { // if !comm.ProtoUnmarshal(msg, rsp) { // code = pb.ErrorCode_PbError // return // } // logrus. // WithFields(logrus.Fields{"nickname": nickName}). // WithFields(logrus.Fields{"rsp": rsp.IsSucc}). // Debug("response create role") // break // } // } // } return }