171 lines
4.7 KiB
Go
171 lines
4.7 KiB
Go
package user
|
|
|
|
import (
|
|
"go_dreamfactory/comm"
|
|
"go_dreamfactory/lego/sys/log"
|
|
"go_dreamfactory/pb"
|
|
"go_dreamfactory/sys/configure"
|
|
"go_dreamfactory/utils"
|
|
|
|
"go.mongodb.org/mongo-driver/mongo"
|
|
)
|
|
|
|
// 参数校验
|
|
func (this *apiComp) LoginCheck(session comm.IUserSession, req *pb.UserLoginReq) (errdata *pb.ErrorData) {
|
|
if req.Account == "" {
|
|
errdata = &pb.ErrorData{
|
|
Code: pb.ErrorCode_ReqParameterError,
|
|
Title: pb.ErrorCode_ReqParameterError.ToString(),
|
|
}
|
|
}
|
|
return
|
|
}
|
|
|
|
// 登录
|
|
func (this *apiComp) Login(session comm.IUserSession, req *pb.UserLoginReq) (errdata *pb.ErrorData) {
|
|
if errdata = this.LoginCheck(session, req); errdata != nil {
|
|
return
|
|
}
|
|
var (
|
|
err error
|
|
user *pb.DBUser
|
|
lastLoginTime int64
|
|
)
|
|
|
|
rsp := &pb.UserLoginResp{}
|
|
|
|
//从mgo查询user
|
|
user, err = this.module.modelUser.FindByAccount(req.Sid, req.Account)
|
|
if err != nil {
|
|
if err != mongo.ErrNoDocuments {
|
|
log.Error("User_FindByAccount",
|
|
log.Field{Key: "uid", Value: req.Sid},
|
|
log.Field{Key: "account", Value: req.Account},
|
|
log.Field{Key: "err", Value: err.Error()},
|
|
)
|
|
return
|
|
}
|
|
}
|
|
|
|
var isNewUser bool
|
|
if user == nil {
|
|
//如果是新玩家,创建一条基础的数据,页面会引导进入创角页面
|
|
user = &pb.DBUser{
|
|
Sid: req.Sid,
|
|
Binduid: req.Account,
|
|
Lastloginip: session.GetIP(),
|
|
Skins: make([]string, 0),
|
|
Area: req.Area,
|
|
Channel: req.Channel,
|
|
Vcode: req.Vcode,
|
|
Vname: req.Vname,
|
|
}
|
|
err = this.module.modelUser.User_Create(user)
|
|
if err != nil {
|
|
log.Errorf("User_CreateUser err %v", err)
|
|
return
|
|
}
|
|
|
|
//初始化任务
|
|
go this.module.ModuleTask.InitTaskAll(user.Uid)
|
|
isNewUser = true
|
|
} else {
|
|
// 玩家是否已在线
|
|
if cu := this.module.modelSession.getUserSession(user.Uid); cu != nil {
|
|
if cu.SessionId != "" {
|
|
// 通知先登录的玩家并解绑
|
|
this.module.SendMsgToUser(string(this.module.GetType()), "othertermlogin", &pb.UserOtherTermLoginPush{Uid: cu.Uid}, cu.Uid)
|
|
if isession, ok := this.module.ModuleBase.GetUserSession(cu.Uid); ok {
|
|
if err := isession.UnBind(); err != nil {
|
|
this.module.Errorf("解绑失败 uid:%v sessionId:%v err:%v", cu.Uid, cu.SessionId, err)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
//bind user
|
|
err = session.Bind(user.Uid, this.service.GetId())
|
|
if err != nil {
|
|
errdata = &pb.ErrorData{
|
|
Code: pb.ErrorCode_BindUser,
|
|
Title: pb.ErrorCode_BindUser.ToString(),
|
|
}
|
|
return
|
|
}
|
|
|
|
//缓存user session
|
|
err = this.module.modelSession.addUserSession(user.Uid, session)
|
|
if err != nil {
|
|
this.module.Errorf("set user session err:%v", err)
|
|
errdata = &pb.ErrorData{
|
|
Code: pb.ErrorCode_UserSessionNobeing,
|
|
Title: pb.ErrorCode_UserSessionNobeing.ToString(),
|
|
}
|
|
return
|
|
}
|
|
|
|
//不是新账号
|
|
if !isNewUser {
|
|
lastLoginTime = user.Logintime
|
|
user.Logintime = configure.Now().Unix()
|
|
user.Lastloginip = session.GetIP()
|
|
user.Offlinetime = 0
|
|
user.Area = req.Area
|
|
user.Channel = req.Channel
|
|
user.Vcode = req.Vcode
|
|
user.Vname = req.Vname
|
|
update := utils.StructToMap(user) //尽量不要更新整个数据
|
|
err = this.module.modelUser.Change(user.Uid, update)
|
|
if err != nil {
|
|
errdata = &pb.ErrorData{
|
|
Code: pb.ErrorCode_DBError,
|
|
Title: pb.ErrorCode_DBError.ToString(),
|
|
Message: err.Error(),
|
|
}
|
|
return
|
|
}
|
|
|
|
if this.module.modelUser.isLoginFirst(lastLoginTime) {
|
|
this.module.ModuleHero.NoLoginDay(user.Uid, int32(utils.DiffDays(lastLoginTime, configure.Now().Unix())))
|
|
go this.module.ModuleBuried.TriggerBuried(session.GetUserId(), comm.GetBuriedParam(comm.Rtype8, 1))
|
|
this.module.modelExpand.updateLoginDay(user.Uid, lastLoginTime)
|
|
// 清理点赞
|
|
this.module.ModuleFriend.ResetFriend(user.Uid)
|
|
this.module.modelSign.UserSign(session)
|
|
}
|
|
|
|
// 判断昨日是否登录
|
|
|
|
rsp.Data = user
|
|
|
|
// 查询玩家扩展数据
|
|
if expand, err := this.module.GetUserExpand(session.GetUserId()); err != nil {
|
|
if err != mongo.ErrNoDocuments {
|
|
errdata = &pb.ErrorData{
|
|
Code: pb.ErrorCode_DBError,
|
|
Title: pb.ErrorCode_DBError.ToString(),
|
|
Message: err.Error(),
|
|
}
|
|
return
|
|
}
|
|
} else {
|
|
rsp.Ex = expand
|
|
}
|
|
} else { //新号
|
|
rsp.Ex = &pb.DBUserExpand{}
|
|
this.module.modelSign.UserSign(session)
|
|
go this.module.ModuleBuried.TriggerBuried(session.GetUserId(), comm.GetBuriedParam(comm.Rtype8, 1))
|
|
}
|
|
|
|
this.module.RecoverUserPsStart(user.Uid)
|
|
// 日常登录任务
|
|
go this.module.ModuleBuried.TriggerBuried(session.GetUserId(), comm.GetBuriedParam(comm.Rtype7, 1))
|
|
this.module.ModulePrivilege.CheckDailyPrivilegeMail(session)
|
|
|
|
rsp.Data = user
|
|
rsp.TimeNow = configure.Now().Unix() // 设置服务器时间
|
|
session.SendMsg(string(this.module.GetType()), UserSubTypeLogin, rsp)
|
|
return
|
|
}
|