154 lines
3.8 KiB
Go
154 lines
3.8 KiB
Go
package user
|
|
|
|
import (
|
|
"go_dreamfactory/comm"
|
|
"go_dreamfactory/lego/sys/log"
|
|
"go_dreamfactory/pb"
|
|
"go_dreamfactory/sys/db"
|
|
"go_dreamfactory/utils"
|
|
"time"
|
|
|
|
"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
|
|
)
|
|
|
|
// t := time.Now()
|
|
rsp := &pb.UserLoginResp{}
|
|
defer func() {
|
|
if user != nil && code == pb.ErrorCode_Success {
|
|
rsp.Data = user
|
|
rsp.TimeNow = time.Now().Unix() // 设置服务器时间
|
|
err = session.SendMsg(string(this.module.GetType()), UserSubTypeLogin, rsp)
|
|
if err != nil {
|
|
code = pb.ErrorCode_SystemError
|
|
return
|
|
}
|
|
// log.Debugf("登录耗时:%v", time.Since(t))
|
|
}
|
|
}()
|
|
|
|
//从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
|
|
}
|
|
|
|
//初始化任务
|
|
go this.module.ModuleTask.InitTaskAll(user.Uid)
|
|
isNewUser = true
|
|
} else {
|
|
if cu := this.module.modelSession.getUserSession(user.Uid); cu != nil {
|
|
if cu.SessionId != "" {
|
|
code = pb.ErrorCode_UserLogined
|
|
return
|
|
}
|
|
}
|
|
}
|
|
|
|
//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.AddList(comm.RDS_SESSION, user.Uid, map[string]interface{}{
|
|
"uid": user.Uid,
|
|
"sessionId": session.GetSessionId(),
|
|
"serviceTag": session.GetServiecTag(),
|
|
"gatewayServiceId": session.GetGatewayServiceId(),
|
|
"ip": session.GetIP(),
|
|
}, db.SetDBMgoLog(false))
|
|
if err != nil {
|
|
code = pb.ErrorCode_DBError
|
|
return
|
|
}
|
|
|
|
//不是新账号
|
|
if !isNewUser {
|
|
lastLoginTime := user.Logintime
|
|
update := map[string]interface{}{
|
|
"logintime": time.Now().Unix(),
|
|
"lastloginip":session.GetIP(),
|
|
}
|
|
err = this.module.modelUser.Change(user.Uid, update)
|
|
if err != nil {
|
|
code = pb.ErrorCode_DBError
|
|
return
|
|
}
|
|
|
|
if this.module.modelUser.isLoginFirst(lastLoginTime) {
|
|
this.module.modelExpand.updateLoginDay(user.Uid, lastLoginTime)
|
|
//清空日常
|
|
this.module.ModuleTask.ResetTask(user.Uid, comm.TASK_DAILY)
|
|
this.module.ModuleTask.InitTaskByTag(user.Uid, comm.TASK_DAILY)
|
|
//清周常
|
|
if utils.IsAfterWeek(lastLoginTime) {
|
|
this.module.ModuleTask.ResetTask(user.Uid, comm.TASK_WEEKLY)
|
|
this.module.ModuleTask.InitTaskByTag(user.Uid, comm.TASK_WEEKLY)
|
|
}
|
|
// 清理点赞
|
|
this.module.ModuleFriend.ResetFriend(user.Uid)
|
|
}
|
|
|
|
rsp.Data = user
|
|
|
|
// 查询玩家扩展数据
|
|
if expand, err := this.module.GetUserExpand(session.GetUserId()); err != nil {
|
|
if err != mongo.ErrNoDocuments {
|
|
code = pb.ErrorCode_DBError
|
|
return
|
|
}
|
|
} else {
|
|
rsp.Ex = expand
|
|
}
|
|
}
|
|
|
|
// 初始化随机任务数据
|
|
go this.module.ModuleRtask.InitCondiData(user.Uid)
|
|
|
|
// 日常登录任务
|
|
this.module.ModuleRtask.SendToRtask(session, comm.Rtype7, 1)
|
|
|
|
//推送登录公告
|
|
this.chat.SendSysChatToUser(session, comm.UserLoginNotice, 0)
|
|
return
|
|
}
|