package user import ( "context" "encoding/base64" "go_dreamfactory/comm" "go_dreamfactory/modules" "go_dreamfactory/pb" "go_dreamfactory/sys/cache" "go_dreamfactory/sys/db" "go_dreamfactory/utils" "time" "go_dreamfactory/lego/sys/event" "go_dreamfactory/lego/sys/log" "github.com/tidwall/gjson" "go.mongodb.org/mongo-driver/mongo" ) type LoginComp struct { modules.MComp_GateComp } //解码 func decodeUserData(base64Str string) *pb.DB_UserData { dec, err := base64.StdEncoding.DecodeString(base64Str[35:]) if err != nil { log.Errorf("base64 decode err %v", err) return nil } now := time.Now().Unix() jsonRet := gjson.Parse(string(dec)) serverId := jsonRet.Get("serverId").Int() timestamp := jsonRet.Get("timestamp").Int() if now-time.Unix(timestamp, 0).Unix() > 100 { return nil } account := jsonRet.Get("account").String() return &pb.DB_UserData{ ServerId: int32(serverId), Account: account, } } //登录 func (this *LoginComp) Login(ctx context.Context, session comm.IUserSession, req *pb.UserLoginReq) (err error) { var ( code pb.ErrorCode db_user *pb.DB_UserData ) defer func() { session.SendMsg("user", "login", code, &pb.UserLoginResp{ Data: &pb.Cache_UserData{ UserData: db_user, }, }) event.TriggerEvent(comm.Event_UserLogin, db_user.UserId) }() if !utils.ValidSecretKey(req.Sec) { code = pb.ErrorCode_SecKeyInvalid return } user := decodeUserData(req.Sec) db_user, err = db.Defsys.User_FindByAccount(user) if err != nil { if err != mongo.ErrNoDocuments { return err } } //如果是新玩家,创建一条基础的数据,页面会引导进入创角页面 if db_user == nil { err = db.Defsys.User_Create(user) if err != nil { log.Errorf("User_CreateUser err %v", err) return } session.Build(user.UserId) } else { session.Build(db_user.UserId) } cache_user := &pb.Cache_UserData{ SessionId: session.GetSessionId(), GatewayServiceId: session.GetGatewayServiceId(), UserData: db_user, } err = cache.Defsys.Update(cache_user) if err != nil { log.Errorf("update cache err:%v", err) return err } return } //注销 func (this *LoginComp) Logout(ctx context.Context, session comm.IUserSession, rsp *pb.UserLoginReq) error { log.Debugf("User - Logout: session:%v rsp:%v", session.ToString(), rsp) return nil }