58 lines
1.6 KiB
Go
58 lines
1.6 KiB
Go
package server
|
|
|
|
import (
|
|
"errors"
|
|
"game/common/proto/pb"
|
|
"game/server/db/model"
|
|
"github.com/fox/fox/ipb"
|
|
"github.com/fox/fox/processor"
|
|
"github.com/fox/fox/service"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
func (s *DbService) initProcessor() {
|
|
s.processor.RegisterMessages(processor.RegisterMetas{
|
|
pb.MsgId_C2SUserLoginId: {pb.C2SUserLogin{}, s.onLoginOrRegister},
|
|
})
|
|
}
|
|
|
|
func (s *DbService) checkLoginOrRegister(req *pb.C2SUserLogin) (user *model.UserAccount, code pb.ErrCode) {
|
|
op := model.NewUserLoginOp()
|
|
var err error
|
|
user, err = op.Login(req.Username, req.Password, req.Ip, req.DeviceId)
|
|
if err != nil {
|
|
if errors.Is(err, gorm.ErrRecordNotFound) {
|
|
user, err = op.RegisterNewUser(req.Username, req.Password, req.Ip, req.DeviceId)
|
|
if err != nil {
|
|
code = pb.ErrCode_RegisterUserExist
|
|
return
|
|
}
|
|
} else if errors.Is(err, model.ErrUserOrPassword) {
|
|
code = pb.ErrCode_LoginUserOrPwdErr
|
|
return
|
|
} else if errors.Is(err, model.ErrAccountFrozen) {
|
|
code = pb.ErrCode_AccountFrozen
|
|
return
|
|
} else if errors.Is(err, model.ErrAccountBanned) {
|
|
code = pb.ErrCode_AccountBanned
|
|
return
|
|
} else {
|
|
code = pb.ErrCode_SystemErr
|
|
}
|
|
}
|
|
return user, code
|
|
}
|
|
|
|
// 登录或注册
|
|
func (s *DbService) onLoginOrRegister(iMsg *ipb.InternalMsg, req *pb.C2SUserLogin) {
|
|
user, code := s.checkLoginOrRegister(req)
|
|
userId := int64(0)
|
|
rsp := &pb.S2CUserLogin{Code: code}
|
|
if user != nil && code == pb.ErrCode_OK {
|
|
rsp.UserId = int64(user.ID)
|
|
rsp.Token = user.Password
|
|
userId = rsp.UserId
|
|
}
|
|
s.SendServiceMsg(service.TopicEx(iMsg.ServiceName), iMsg.ConnId, userId, int32(pb.MsgId_S2CUserLoginId), rsp)
|
|
}
|