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 }