235 lines
7.1 KiB
Go
235 lines
7.1 KiB
Go
package user
|
|
|
|
import (
|
|
"go_dreamfactory/comm"
|
|
"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) {
|
|
var (
|
|
user *pb.DBUser
|
|
expand *pb.DBUserExpand
|
|
lastLoginTime int64
|
|
update map[string]interface{} = make(map[string]interface{})
|
|
err error
|
|
tasks []*pb.BuriedParam = make([]*pb.BuriedParam, 0)
|
|
)
|
|
|
|
if errdata = this.LoginCheck(session, req); errdata != nil {
|
|
return
|
|
}
|
|
|
|
//从mgo查询user
|
|
user, err = this.module.modelUser.FindByAccount(req.Sid, req.Account)
|
|
if err != nil && err != mongo.ErrNoDocuments {
|
|
errdata = &pb.ErrorData{
|
|
Code: pb.ErrorCode_DBError,
|
|
Title: pb.ErrorCode_DBError.ToString(),
|
|
Message: err.Error(),
|
|
}
|
|
return
|
|
}
|
|
|
|
if err == mongo.ErrNoDocuments {
|
|
//如果是新玩家,创建一条基础的数据,页面会引导进入创角页面
|
|
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 {
|
|
errdata = &pb.ErrorData{
|
|
Code: pb.ErrorCode_DBError,
|
|
Title: pb.ErrorCode_DBError.ToString(),
|
|
Message: err.Error(),
|
|
}
|
|
return
|
|
}
|
|
expand = &pb.DBUserExpand{}
|
|
} else {
|
|
// 玩家是否已在线
|
|
if isession, ok := this.module.ModuleBase.GetUserSession(user.Uid); ok {
|
|
isession.SendMsg(string(this.module.GetType()), "othertermlogin", &pb.UserOtherTermLoginPush{Uid: user.Uid})
|
|
isession.SyncPush()
|
|
isession.UnBind()
|
|
this.module.PutUserSession(isession)
|
|
}
|
|
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["logintime"] = user.Logintime
|
|
update["lastloginip"] = user.Lastloginip
|
|
update["offlinetime"] = user.Offlinetime
|
|
update["Channel"] = user.Channel
|
|
update["vcode"] = user.Vcode
|
|
update["vname"] = user.Vname
|
|
|
|
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
|
|
}
|
|
}
|
|
|
|
if !utils.IsToday(lastLoginTime) { //当天第一次登录
|
|
user.Nologindays = int32(utils.DiffDays(lastLoginTime, configure.Now().Unix()))
|
|
tasks = append(tasks, comm.GetBuriedParam(comm.Rtype8, 1))
|
|
this.module.modelExpand.Change(session.GetUserId(), map[string]interface{}{
|
|
"loginAddCount": expand.LoginAddCount + 1,
|
|
"globalbuff": 0,
|
|
"consumPs": 0, // 重置每日消耗体力
|
|
"loginContinueCount": expand.LoginContinueCount + 1,
|
|
})
|
|
// 清理点赞
|
|
|
|
}
|
|
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
|
|
}
|
|
}
|
|
|
|
tasks = append(tasks, comm.GetBuriedParam(comm.Rtype7, 1))
|
|
tasks = append(tasks, comm.GetBuriedParam(comm.Rtype230, 1, int32(configure.Now().Weekday())))
|
|
//缓存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(),
|
|
Message: err.Error(),
|
|
}
|
|
return
|
|
}
|
|
session.SendMsg(string(this.module.GetType()), UserSubTypeLogin, &pb.UserLoginResp{
|
|
Data: user,
|
|
Ex: expand,
|
|
TimeNow: configure.Now().Unix(),
|
|
})
|
|
|
|
go this.module.AsynHandleSession(session.Clone(), func(session comm.IUserSession) {
|
|
this.module.ModuleFriend.ResetFriend(user.Uid)
|
|
this.module.modelSign.UserSign(session)
|
|
this.module.ModuleItems.InitItemBagData(session)
|
|
this.module.ModuleHero.CheckPeachReward(session, user.Ctime)
|
|
if len(tasks) > 0 {
|
|
this.module.ModuleBuried.TriggerBuried(session.Clone(), tasks...)
|
|
}
|
|
})
|
|
|
|
// 在logintime更新前判断是否是昨天
|
|
// if utils.IsYestoday(user.Logintime) {
|
|
// tasks = append(tasks, comm.GetBuriedParam(comm.Rtype9, 1))
|
|
// } else {
|
|
// this.module.ModuleBuried.ResetBuriedByType(user.Uid, comm.Rtype9)
|
|
// }
|
|
|
|
//不是新账号
|
|
// 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())))
|
|
// tasks = append(tasks, comm.GetBuriedParam(comm.Rtype8, 1))
|
|
// this.module.modelExpand.updateLoginDay(user.Uid, lastLoginTime)
|
|
// // 清理点赞
|
|
// this.module.ModuleFriend.ResetFriend(user.Uid)
|
|
// this.module.modelSign.UserSign(session)
|
|
// this.module.ModuleItems.InitItemBagData(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)
|
|
// tasks = append(tasks, comm.GetBuriedParam(comm.Rtype8, 1))
|
|
// }
|
|
|
|
// this.module.ModuleHero.CheckPeachReward(session, user.Ctime)
|
|
// go this.module.RecoverUserPsStart(session.Clone())
|
|
// // 日常登录任务
|
|
// tasks = append(tasks, comm.GetBuriedParam(comm.Rtype7, 1))
|
|
// tasks = append(tasks, comm.GetBuriedParam(comm.Rtype230, 1, int32(configure.Now().Weekday())))
|
|
// this.module.ModulePrivilege.CheckDailyPrivilegeMail(session)
|
|
|
|
// rsp.Data = user
|
|
// rsp.TimeNow = configure.Now().Unix() // 设置服务器时间
|
|
// session.SendMsg(string(this.module.GetType()), UserSubTypeLogin, rsp)
|
|
// if len(tasks) > 0 {
|
|
// go this.module.ModuleBuried.TriggerBuried(session.Clone(), tasks...)
|
|
// }
|
|
|
|
// event.TriggerEvent(comm.EventUserLogin, session.Clone())
|
|
return
|
|
}
|