Browse Source

负载同步

zhengtao 7 months ago
parent
commit
bbe30331b0

+ 12 - 1
game/game_cluster/internal/mdb/models/account.go

@@ -13,6 +13,7 @@ import (
 	"github.com/mhaya/game/game_cluster/internal/mdb"
 	"github.com/mhaya/game/game_cluster/internal/param"
 	initdata "github.com/mhaya/game/game_cluster/internal/third/tg_sign"
+	"github.com/mhaya/game/game_cluster/internal/token"
 	clog "github.com/mhaya/logger"
 	"go.mongodb.org/mongo-driver/bson"
 	"go.mongodb.org/mongo-driver/mongo"
@@ -124,10 +125,20 @@ func (ac *Account) AccountRegisterOrLogin(req *param.LoginReq) (*Account, int32)
 		clog.Errorf("Failed to AccountRegisterOrLogin request: %v  err = %v", devAccountTable, err.Error())
 		return nil, code.LoginError
 	}
-
+	player := NewPlayer(token.New(req.Pid, req.OpenID, devAccountTable.UserName, "", "", ""))
 	jsonData, _ := jsoniter.Marshal(&devAccountTable)
 	err = mdb.RDB.Set(context.Background(), fmt.Sprintf("%v:%v", constant.CNameAccount, devAccountTable.OpenId), jsonData, time.Hour*3*24).Err()
 
+	jsonData, err = jsoniter.Marshal(&player)
+	if err != nil {
+		clog.Errorf("Failed to AccountRegisterOrLogin request: %v  err = %v", devAccountTable, err.Error())
+		return nil, code.LoginError
+	}
+	err = mdb.RDB.Set(ctx, fmt.Sprintf("%v:%v", constant.CNamePlayer, req.OpenID), jsonData, time.Hour*3*24).Err()
+	if err != nil {
+		clog.Errorf("Failed to AccountRegisterOrLogin request: %v  err = %v", devAccountTable, err.Error())
+		return nil, code.LoginError
+	}
 	//统计新注册
 	SetDailyRecordNewUserRegisterHash(req.Platform, req.Channel, devAccountTable.UserName, req.IP, DailyRecordNewRegistered)
 

+ 2 - 1
game/game_cluster/internal/mdb/models/player.go

@@ -32,7 +32,7 @@ type Player struct {
 	Avatar            string `json:"avatar" bson:"avatar"`                       // 头像
 	Password          string `json:"-" bson:"password"`                          //账户密码
 	Salt              string `json:"-" bson:"salt"`                              //密码盐
-	IsSetPwd          bool   `json:"isSetPwd" bson:"-"`                          //是否设置密码
+	IsNew             bool   `json:"isNew" bson:"isNew"`                         //是否新用户
 	PwdErrTimes       int    `json:"pwdErrTimes" bson:"pwdErrTimes"`             //密码错误次数
 	PwdErrRefreshTime int64  `json:"pwdErrRefreshTime" bson:"pwdErrRefreshTime"` //密码到期时间
 
@@ -85,6 +85,7 @@ func NewPlayer(token *token.Token) *Player {
 		OpenId:           token.OpenID,
 		NickName:         token.Nickname,
 		IsRobot:          0,
+		IsNew:            true,
 		Successions:      1,
 		MaxSuccessions:   1,
 		LoginTime:        mhayaTime.Now().Unix(),

+ 10 - 20
game/game_cluster/nodes/game/module/player/actor_player.go

@@ -103,12 +103,12 @@ func (p *actorPlayer) OnInit() {
 	//p.Timer().Add(10*time.Second, p.refreshRoll)
 	p.Timer().Add(60*time.Second, p.SetRewardToDB)
 	p.Timer().Add(1*time.Minute, p.setRedis)
-	//p.Timer().Add(60*time.Second, p.setDb)
+	p.Timer().Add(60*time.Second, p.setDb)
 	//p.Timer().Add(30*time.Second, p.setInviteReward)
 
 	//p.Timer().Add(1*time.Second, p.addRoll)
 
-	p.Timer().Add(10*time.Second, p.playerSessionClose)
+	p.Timer().Add(30*time.Second, p.playerSessionClose)
 
 	//p.Timer().Add(1*time.Minute, p.upatePlayerLevelStat)
 
@@ -231,14 +231,12 @@ func (p *actorPlayer) SetRewardToDB() {
 func (p *actorPlayer) setRedisAll() {
 	if p.isOnline && p.Player != nil && p.dirty {
 		ctx := context.Background()
-		cachePlayer := CachePlayer{Dirty: true, Player: p.Player}
 		// 将玩家信息转换为 JSON 格式并存储到 Redis
-		jsonData, err := jsoniter.Marshal(&cachePlayer)
+		jsonData, err := jsoniter.Marshal(&p.Player)
 		if err != nil {
 			return
 		}
-		mdb.RDB.HSet(ctx, fmt.Sprintf("%v:%v", constant.CNamePlayer, p.App().NodeId()), p.Player.OpenId, jsonData)
-		p.dirty = false
+		mdb.RDB.Set(ctx, fmt.Sprintf("%v:%v", constant.CNamePlayer, p.Player.OpenId), jsonData, time.Hour*3*24)
 	}
 }
 
@@ -460,29 +458,25 @@ func (p *actorPlayer) Init(req *token.Token) {
 	}
 
 	var player models.Player
-	var cachePlayer CachePlayer
-	play, err := mdb.RDB.HGet(ctx, fmt.Sprintf("%v:%v", constant.CNamePlayer, p.App().NodeId()), req.OpenID).Bytes()
+	play, err := mdb.RDB.Get(ctx, fmt.Sprintf("%v:%v", constant.CNamePlayer, req.OpenID)).Bytes()
 	if err != nil && err != redis.Nil {
 		clog.Debugf("[actorPlayer] initUser error: %v", err)
 		return
 	}
 	if len(play) > 0 {
-		err = jsoniter.Unmarshal(play, &cachePlayer)
+		err = jsoniter.Unmarshal(play, &player)
 		if err != nil {
 			clog.Debugf("[actorPlayer] unmarshal player data error: %v", err)
 			return
 		}
-		p.Player = cachePlayer.Player
+		p.Player = &player
 	} else {
 		mdb.MDB.Collection(constant.CNamePlayer).FindOne(context.Background(), bson.M{"userName": req.PlayerID}).Decode(&player)
-		cachePlayer.Player = &player
 	}
-	if cachePlayer.Player.OpenId == "" {
-		user := models.NewPlayer(req)
+	if player.IsNew {
 		//	go mdb.MDB.Collection(constant.CNamePlayer).InsertOne(context.Background(), user)
-		//标记新用户
-		mdb.RDB.HSet(ctx, constant.NewPlayers, req.OpenID, 1)
-		p.Player = user
+		p.Player.NickName = req.Nickname
+		p.Player.IsNew = false
 		clog.Debugf("[Init] newUser userName = %s openId = %s", p.Player.UserName, p.Player.OpenId)
 		p.botInvite()
 	}
@@ -566,10 +560,6 @@ func (p *actorPlayer) login(req *token.Token) (*models.Player, int32) {
 	loginEvent := event.NewPlayerLogin(p.ActorID(), req)
 	p.PostEvent(&loginEvent)
 
-	if len(p.Player.Password) > 0 {
-		p.Player.IsSetPwd = true
-	}
-
 	//// todo 测试代码
 	//p.Player.JoinIP = "13.229.223.106"
 	return p.Player, code.OK

+ 1 - 2
game/game_cluster/nodes/game/module/player/actor_players.go

@@ -42,7 +42,7 @@ func (p *ActorPlayers) OnInit() {
 	p.Remote().Register("checkChild", p.checkChild)
 
 	p.Timer().AddOnce(20*time.Second, p.loadServer)
-	p.Timer().Add(2*time.Minute, p.SetDb)
+	//p.Timer().Add(2*time.Minute, p.SetDb)
 }
 
 func (p *ActorPlayers) loadServer() {
@@ -188,6 +188,5 @@ func (p *ActorPlayers) onPlayerCreateEvent(e cfacade.IEventData) {
 }
 
 func (p *ActorPlayers) OnStop() {
-	p.SetDb()
 	clog.Infof("onlineCount = %d", online.Count())
 }

+ 0 - 4
game/game_cluster/nodes/game/module/player/start.go

@@ -28,10 +28,6 @@ func (p *actorPlayer) start() (*models.HomeData, int32) {
 		}
 	}
 
-	if len(p.Player.Password) > 0 {
-		p.Player.IsSetPwd = true
-	}
-
 	// 币安等级
 	curLv, _ := mdb.RDB.Get(context.Background(), constant.RocketLvKey).Int()
 

+ 1 - 1
game/game_cluster/robot_client/main.go

@@ -55,7 +55,7 @@ func main() {
 					Platform: "ios",
 					Channel:  "tg",
 				}
-				n := rand.Intn(4)
+				n := rand.Intn(1)
 				switch n {
 				case 0:
 					RunRobot(*url, account, i)