package user import ( "go_dreamfactory/comm" "go_dreamfactory/lego/sys/event" "go_dreamfactory/lego/sys/log" "go_dreamfactory/modules" "go_dreamfactory/pb" "go_dreamfactory/utils" "time" "go.mongodb.org/mongo-driver/bson/primitive" "go.mongodb.org/mongo-driver/mongo" "google.golang.org/protobuf/proto" ) //参数校验 func (this *apiComp) LoginCheck(session comm.IUserSession, req *pb.UserLoginReq) (code pb.ErrorCode) { if req.Account == "" { code = pb.ErrorCode_ReqParameterError } return } //登录 func (this *apiComp) Login(session comm.IUserSession, req *pb.UserLoginReq) (code pb.ErrorCode, data proto.Message) { if code = this.LoginCheck(session, req); code != pb.ErrorCode_Success { return } var ( err error user *pb.DBUser ) defer func() { if user != nil { err = session.SendMsg(string(this.module.GetType()), UserSubTypeLogin, &pb.UserLoginResp{ Data: user, }) if err != nil { code = pb.ErrorCode_SystemError return } event.TriggerEvent(comm.EventUserLogin, user.Uid) } }() //从mgo查询user user, err = this.module.modelUser.FindByAccount(req.Sid, req.Account) if err != nil { if err != mongo.ErrNoDocuments { log.Errorf("User_FindByAccount err %v", err) return } } var isNewUser bool if user == nil { //如果是新玩家,创建一条基础的数据,页面会引导进入创角页面 user = &pb.DBUser{ Sid: req.Sid, Binduid: req.Account, Lastloginip: session.GetIP(), } err = this.module.modelUser.User_Create(user) if err != nil { log.Errorf("User_CreateUser err %v", err) return } isNewUser = true } //bind user err = session.Bind(user.Uid, this.service.GetId()) if err != nil { this.module.Errorf("err:%v", err) code = pb.ErrorCode_BindUser return } //缓存user session err = this.module.modelSession.Change(user.Uid, map[string]interface{}{ "uid": user.Uid, "sessionId": session.GetSessionId(), "serviceTag": session.GetServiecTag(), "gatewayServiceId": session.GetGatewayServiceId(), "ip": session.GetIP(), }, modules.SetDBExpire(time.Hour*12), modules.SetDBMgoLog(false)) if err != nil { code = pb.ErrorCode_DBError return } //不是新账号 if !isNewUser { //set user other info user.Logintime = time.Now().Unix() user.Lastloginip = session.GetIP() update := utils.StructToMap(user) err = this.module.modelUser.Change(user.Uid, update) if err != nil { code = pb.ErrorCode_DBError return } go func() { if this.module.modelUser.isLoginFirst(user.Logintime) { //清空日常 this.module.ModuleTask.ResetTask(user.Uid, comm.TASK_DAILY) //清周常 if utils.IsAfterWeek(user.Logintime) { this.module.ModuleTask.ResetTask(user.Uid, comm.TASK_WEEKLY) } } }() } mail := &pb.DBMailData{ ObjId: primitive.NewObjectID().Hex(), Uid: user.Uid, Title: "系统邮件", Contex: "恭喜获得登录专属礼包一份", CreateTime: uint64(time.Now().Unix()), DueTime: uint64(time.Now().Unix()) + 30*24*3600, // 30天需要走配置文件 Check: false, Reward: false, } fj := make([]*pb.UserAssets, 0) atn1 := &pb.UserAssets{ A: "hero", T: "25001", N: 1, } atn2 := &pb.UserAssets{ A: "item", T: "10001", N: 100, } fj = append(fj, atn1) fj = append(fj, atn2) mail.Items = fj this.mail.CreateNewMail(session, mail) return }