Compare commits
6 Commits
4d65851083
...
bcbc162549
Author | SHA1 | Date |
---|---|---|
|
bcbc162549 | |
|
5ca1048b18 | |
|
9c3f3ea191 | |
|
cab63a8bf9 | |
|
500fed59dd | |
|
bf636de73a |
|
@ -7,6 +7,7 @@ import (
|
|||
"math/rand"
|
||||
"time"
|
||||
|
||||
"go.mongodb.org/mongo-driver/bson/primitive"
|
||||
rawproto "google.golang.org/protobuf/proto"
|
||||
"mongo.games.com/goserver/core/logger"
|
||||
"mongo.games.com/goserver/core/netlib"
|
||||
|
@ -641,15 +642,15 @@ func (this *Player) ReportGameEvent(param *ReportGameEventParam) *ReportGameEven
|
|||
var gameTimes, gameFreeTimes int64
|
||||
data, ok := this.GDatas[this.scene.KeyGamefreeId]
|
||||
if ok {
|
||||
gameFirstTime = data.FirstTime
|
||||
gameTimes = data.Statics.GameTimes
|
||||
gameFreeFirstTime = data.FirstTime
|
||||
gameFreeTimes = data.Statics.GameTimes
|
||||
}
|
||||
|
||||
// 记录玩家 首次参与该游戏时间 游戏次数(不区分场次)
|
||||
dataGame, ok := this.GDatas[this.scene.KeyGameId]
|
||||
if ok {
|
||||
gameFreeFirstTime = dataGame.FirstTime
|
||||
gameFreeTimes = dataGame.Statics.GameTimes
|
||||
gameFirstTime = dataGame.FirstTime
|
||||
gameTimes = dataGame.Statics.GameTimes
|
||||
}
|
||||
|
||||
isNew := int32(0)
|
||||
|
@ -668,12 +669,13 @@ func (this *Player) ReportGameEvent(param *ReportGameEventParam) *ReportGameEven
|
|||
var ret ReportGameEventOnly
|
||||
ret.Param = param
|
||||
log := &model.PlayerGameRecEvent{
|
||||
Platform: this.Platform,
|
||||
RecordId: this.scene.GetRecordId(),
|
||||
SnId: this.GetSnId(),
|
||||
Channel: this.Channel,
|
||||
ChannelId: this.ChannelId,
|
||||
City: this.City,
|
||||
Id: primitive.NewObjectID().Hex(),
|
||||
Platform: this.Platform,
|
||||
RecordId: this.scene.GetRecordId(),
|
||||
SnId: this.GetSnId(),
|
||||
Channel: this.Channel,
|
||||
ChannelId: this.ChannelId,
|
||||
//City: this.City,
|
||||
OS: this.DeviceOS,
|
||||
GameId: this.scene.GameId,
|
||||
ModeId: this.scene.GameMode,
|
||||
|
@ -686,12 +688,12 @@ func (this *Player) ReportGameEvent(param *ReportGameEventParam) *ReportGameEven
|
|||
IsNew: isNew,
|
||||
GameFreeID: this.scene.GetGameFreeId(),
|
||||
GamingTime: int32(param.GameTime),
|
||||
FirstTime: gameFirstTime.Unix(),
|
||||
PlayTimes: gameTimes,
|
||||
FirstGameTime: gameFreeFirstTime.Unix(),
|
||||
PlayGameTimes: gameFreeTimes,
|
||||
FirstTime: gameFreeFirstTime.Unix(),
|
||||
PlayTimes: gameFreeTimes,
|
||||
FirstGameTime: gameFirstTime.Unix(),
|
||||
PlayGameTimes: gameTimes,
|
||||
LastLoginTime: this.LastLoginTime.Unix(),
|
||||
DeviceId: this.DeviceId,
|
||||
//DeviceId: this.DeviceId,
|
||||
}
|
||||
if param.OnlyLog {
|
||||
ret.Log = append(ret.Log, log)
|
||||
|
|
|
@ -245,34 +245,36 @@ func CreatePlayerLoginEvent(snid int32, channel, promoter, platform, city, os, i
|
|||
|
||||
// 玩家游戏记录
|
||||
type PlayerGameRecEvent struct {
|
||||
RecordId string //游戏记录ID
|
||||
SnId int32 //用户ID
|
||||
Channel string //包类型
|
||||
Promoter string //推广
|
||||
Platform string //平台
|
||||
City string //城市
|
||||
OS string //操作系统
|
||||
TelephonePromoter int32 //电销标记
|
||||
GameId int32 //游戏id
|
||||
ModeId int32 //游戏模式
|
||||
Tax int64 //税收
|
||||
Amount int64 //金币变化(正值为赢;负值为输)
|
||||
CreateTime int64 //创建时间
|
||||
CreateDayTime int64 //账号创建时间0点
|
||||
ValidBet int64 //有效下注数量
|
||||
ValidFlow int64 //有效流水数量
|
||||
Out int64 //产出
|
||||
In int64 //投入
|
||||
IsNew int32 //是否是新人
|
||||
GameFreeID int32 //游戏freeid
|
||||
GamingTime int32 //游戏开始到玩家结算的时长 单位:秒
|
||||
FirstTime int64 //首次玩该场次游戏时间
|
||||
PlayTimes int64 //该场次游戏次数
|
||||
FirstGameTime int64 //首次玩游戏时间
|
||||
PlayGameTimes int64 //该游戏总次数
|
||||
LastLoginTime int64 //最后登录时间
|
||||
DeviceId string //设备id
|
||||
ChannelId string //推广渠道id
|
||||
Id string //id
|
||||
RecordId string //游戏记录ID
|
||||
SnId int32 //用户ID
|
||||
Channel string //包类型
|
||||
Platform string //平台
|
||||
OS string //操作系统
|
||||
GameId int32 //游戏id
|
||||
ModeId int32 //游戏模式
|
||||
Tax int64 //税收
|
||||
Amount int64 //金币变化,税后(正值为赢;负值为输)
|
||||
CreateTime int64 //创建时间
|
||||
CreateDayTime int64 //账号创建时间0点
|
||||
Out int64 //产出
|
||||
In int64 //投入
|
||||
IsNew int32 //是否是新人
|
||||
GameFreeID int32 //游戏freeid
|
||||
GamingTime int32 //游戏开始到玩家结算的时长 单位:秒
|
||||
|
||||
GameDif int32 // 游戏分组
|
||||
FirstGameDifTime int64 // 首次游戏分组时间
|
||||
GameDifTimes int64 // 游戏分组游戏次数
|
||||
|
||||
FirstTime int64 //首次玩该场次游戏时间
|
||||
PlayTimes int64 //该场次游戏次数
|
||||
|
||||
FirstGameTime int64 //首次玩游戏时间
|
||||
PlayGameTimes int64 //该游戏总次数
|
||||
|
||||
LastLoginTime int64 //最后登录时间
|
||||
ChannelId string //推广渠道id
|
||||
}
|
||||
|
||||
// 玩家游戏记录
|
||||
|
|
|
@ -99,6 +99,7 @@ func SCPlayerFlag(s *netlib.Session, packetid int, data interface{}) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
// 更新房间里玩家的状态
|
||||
if scene, ok := GetScene(s).(IScene); ok && scene != nil {
|
||||
p := scene.GetPlayerBySnid(msg.GetPlayerId())
|
||||
if p != nil {
|
|
@ -52,6 +52,7 @@ func SCDestroyRoom(s *netlib.Session, packid int, pack interface{}) error {
|
|||
|
||||
if msg.GetOpRetCode() == gamehallproto.OpResultCode_Game_OPRC_Sucess_Game {
|
||||
cleanRoomState(s)
|
||||
SceneMgrSingleton.DelScene(msg.GetRoomId())
|
||||
return nil
|
||||
}
|
||||
|
|
@ -30,12 +30,12 @@ import (
|
|||
func init() {
|
||||
common.RegisterClockFunc(&common.ClockFunc{
|
||||
OnHourTimerFunc: func() {
|
||||
ClientMgrSingleton.HourChange()
|
||||
ClientMgrSingleton.AccountReplace()
|
||||
|
||||
logger.Logger.Infof("client state: %+v", ClientMgrSingleton.GetState())
|
||||
logger.Logger.Info(ClientMgrSingleton.GetState())
|
||||
},
|
||||
OnDayTimerFunc: func() {
|
||||
ClientMgrSingleton.DayChange()
|
||||
ClientMgrSingleton.AccountDeletePolicy()
|
||||
},
|
||||
})
|
||||
}
|
||||
|
@ -110,13 +110,17 @@ func (this *ClientMgr) UnRegisterSession(acc string) {
|
|||
delete(this.sessionPool, acc)
|
||||
}
|
||||
|
||||
func (this *ClientMgr) HourChange() {
|
||||
// AccountReplace 账号替换
|
||||
func (this *ClientMgr) AccountReplace() {
|
||||
fileModify := false
|
||||
eventArr := this.CycleTimeEvent[time.Now().Hour()]
|
||||
for _, event := range eventArr {
|
||||
accChan[event.newAcc] = true //使用新的账号
|
||||
cfg := NewSessionConfig()
|
||||
netlib.Connect(cfg) //创建新的连接
|
||||
|
||||
//创建新的连接
|
||||
NewSession()
|
||||
|
||||
// 关闭旧的连接
|
||||
if session, ok := this.sessionPool[event.oldAcc]; ok && session != nil {
|
||||
//删除旧有账号数据
|
||||
pack := &serverproto.RWAccountInvalid{
|
||||
|
@ -128,6 +132,7 @@ func (this *ClientMgr) HourChange() {
|
|||
//关闭连接
|
||||
session.Close()
|
||||
}
|
||||
|
||||
//更新本地账号数据信息
|
||||
for key, value := range accPool {
|
||||
if value.Acc == event.oldAcc {
|
||||
|
@ -156,7 +161,8 @@ func (this *ClientMgr) HourChange() {
|
|||
}
|
||||
}
|
||||
|
||||
func (this *ClientMgr) DayChange() {
|
||||
// AccountDeletePolicy 账号删除策略
|
||||
func (this *ClientMgr) AccountDeletePolicy() {
|
||||
invalidCount := 0 //过期账号数量
|
||||
updateLimit := len(accPool) * model.GameParamData.InvalidRobotAccRate / 100 //可更新的账号数量
|
||||
invalidAccs := []InvalidAcc{}
|
||||
|
@ -201,6 +207,10 @@ type ClientState struct {
|
|||
Event map[int]int
|
||||
}
|
||||
|
||||
func (c *ClientState) String() string {
|
||||
return fmt.Sprintf("ClientMgrState 连接总数:%v, 每小时账号替换数量:%v", c.SessionNum, c.Event)
|
||||
}
|
||||
|
||||
func (this *ClientMgr) GetState() *ClientState {
|
||||
ret := &ClientState{
|
||||
SessionNum: len(this.sessionPool),
|
||||
|
|
|
@ -18,12 +18,19 @@ var (
|
|||
WaitConnectSessions []*netlib.SessionConfig
|
||||
)
|
||||
|
||||
func NewSessionConfig() *netlib.SessionConfig {
|
||||
BenchMarkModule.idx++
|
||||
// NewSession 新建session
|
||||
// id 连接id, 默认自动分配
|
||||
func NewSession(id ...int) {
|
||||
cfg := Config.Connects
|
||||
cfg.Id = BenchMarkModule.idx
|
||||
if len(id) > 0 && id[0] > 0 {
|
||||
cfg.Id = id[0]
|
||||
} else {
|
||||
BenchMarkModule.idx++
|
||||
cfg.Id = BenchMarkModule.idx
|
||||
}
|
||||
cfg.Init()
|
||||
return &cfg
|
||||
logger.Logger.Info("waite connect session id=", cfg.Id)
|
||||
WaitConnectSessions = append(WaitConnectSessions, &cfg)
|
||||
}
|
||||
|
||||
type BenchMark struct {
|
||||
|
@ -37,9 +44,7 @@ func (m *BenchMark) ModuleName() string {
|
|||
func (m *BenchMark) Init() {
|
||||
m.idx = RobotSessionStartId
|
||||
for i := 0; i < Config.Count; i++ {
|
||||
cfg := NewSessionConfig()
|
||||
logger.Logger.Info("waite connect session id=", cfg.Id)
|
||||
WaitConnectSessions = append(WaitConnectSessions, cfg)
|
||||
NewSession()
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -62,10 +62,7 @@ func (g *GateSessionHandler) OnSessionClosed(s *netlib.Session) {
|
|||
StopSessionPingTimer(s)
|
||||
if reconnect {
|
||||
logger.Logger.Infof("账号重连 sessionID:%v account:%v", s.Id, accIdParam)
|
||||
cfg := Config.Connects
|
||||
cfg.Id = s.GetSessionConfig().Id
|
||||
cfg.Init()
|
||||
WaitConnectSessions = append(WaitConnectSessions, &cfg)
|
||||
NewSession(s.GetSessionConfig().Id)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -16,9 +16,9 @@ type AccountData struct {
|
|||
}
|
||||
|
||||
var (
|
||||
// 待使用的账号,将要建立连接
|
||||
// 待登录的账号,将要建立连接
|
||||
accChan = make(map[string]bool)
|
||||
// 账号池,当前正在使用的机器人
|
||||
// 账号池,当前正在使用的机器人账号
|
||||
accPool []*AccountData
|
||||
)
|
||||
var accountFileName = "robotaccount.json"
|
||||
|
|
|
@ -1,12 +1,13 @@
|
|||
package base
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"math/rand"
|
||||
"mongo.games.com/game/common"
|
||||
|
||||
"mongo.games.com/goserver/core/logger"
|
||||
"mongo.games.com/goserver/core/netlib"
|
||||
|
||||
"mongo.games.com/game/common"
|
||||
"mongo.games.com/game/proto"
|
||||
hall_proto "mongo.games.com/game/protocol/gamehall"
|
||||
player_proto "mongo.games.com/game/protocol/player"
|
||||
|
@ -20,6 +21,9 @@ func init() {
|
|||
OnMiniTimerFunc: func() {
|
||||
PlayerMgrSingleton.OnMiniTimer()
|
||||
},
|
||||
OnHourTimerFunc: func() {
|
||||
logger.Logger.Info(PlayerMgrSingleton.GetState())
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
|
@ -173,3 +177,22 @@ func (pm *PlayerMgr) OnSecondTimer() {
|
|||
func (pm *PlayerMgr) OnMiniTimer() {
|
||||
pm.ProcessCheckRobotNum()
|
||||
}
|
||||
|
||||
type PlayerMgrState struct {
|
||||
PlayerNum int
|
||||
NormalSessionNum int
|
||||
MatchSessionNum int
|
||||
}
|
||||
|
||||
func (p *PlayerMgrState) String() string {
|
||||
return fmt.Sprintf("PlayerMgrState 玩家总数:%v, 普通场连接数:%v, 比赛场连接数:%v", p.PlayerNum, p.NormalSessionNum, p.MatchSessionNum)
|
||||
}
|
||||
|
||||
func (pm *PlayerMgr) GetState() *PlayerMgrState {
|
||||
ret := &PlayerMgrState{
|
||||
PlayerNum: len(pm.playersMapSnId),
|
||||
NormalSessionNum: len(pm.playersSession),
|
||||
MatchSessionNum: len(pm.playersMatchSession),
|
||||
}
|
||||
return ret
|
||||
}
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package base
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"mongo.games.com/goserver/core/logger"
|
||||
|
@ -16,11 +17,7 @@ func init() {
|
|||
|
||||
common.RegisterClockFunc(&common.ClockFunc{
|
||||
OnHourTimerFunc: func() {
|
||||
sceneState := map[int32]int{}
|
||||
for _, v := range SceneMgrSingleton.Scenes {
|
||||
sceneState[v.GetGameId()]++
|
||||
}
|
||||
logger.Logger.Infof("sceneState: %v", sceneState)
|
||||
logger.Logger.Info(SceneMgrSingleton.GetState())
|
||||
},
|
||||
})
|
||||
}
|
||||
|
@ -71,6 +68,22 @@ func (sm *SceneMgr) IsFreeMode(sceneId int32) bool {
|
|||
return false
|
||||
}
|
||||
|
||||
type SceneMgrState struct {
|
||||
Num map[int32]int
|
||||
}
|
||||
|
||||
func (s *SceneMgrState) String() string {
|
||||
return fmt.Sprintf("SceneMgrState 每个游戏的房间数量 [游戏id:房间数量]: %v", s.Num)
|
||||
}
|
||||
|
||||
func (sm *SceneMgr) GetState() *SceneMgrState {
|
||||
m := make(map[int32]int)
|
||||
for _, v := range sm.Scenes {
|
||||
m[v.GetGameId()]++
|
||||
}
|
||||
return &SceneMgrState{Num: m}
|
||||
}
|
||||
|
||||
// //////////////////////////////////////////////////////////////////
|
||||
// / Module Implement [beg]
|
||||
// //////////////////////////////////////////////////////////////////
|
||||
|
|
|
@ -341,10 +341,7 @@ func (this *Scene) PlayerEnter(p *Player, pos int, ischangeroom bool) bool {
|
|||
//离场金币
|
||||
leaverng := this.dbGameFree.GetRobotLimitCoin()
|
||||
if len(leaverng) >= 2 {
|
||||
rangeValue := leaverng[1] - leaverng[0]
|
||||
if rangeValue > 0 {
|
||||
leaveCoin = leaverng[0] + rand.Int63n(rangeValue)
|
||||
}
|
||||
leaveCoin = int64(common.RandInt(int(leaverng[0]), int(leaverng[1])))
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -34,13 +34,14 @@ type SceneMgr struct {
|
|||
common.BaseClockSinker // 驱动时间事件
|
||||
scenes map[int]*Scene // 房间id: Scene
|
||||
|
||||
privateAutoId int // 私人房房间号
|
||||
matchAutoId int // 比赛场房间号
|
||||
coinSceneAutoId int // 金币场房间号
|
||||
hundredSceneAutoId int // 百人场房间号
|
||||
password map[string]struct{} // 密码
|
||||
pushList map[int]struct{} // 已经推荐过的房间列表
|
||||
lastPushSceneId int // 最后推荐的房间id
|
||||
privateAutoId int // 私人房房间号
|
||||
matchAutoId int // 比赛场房间号
|
||||
coinSceneAutoId int // 金币场房间号
|
||||
hundredSceneAutoId int // 百人场房间号
|
||||
|
||||
password map[string]struct{} // 密码
|
||||
pushList map[int]struct{} // 已经推荐过的房间列表
|
||||
lastPushSceneId int // 最后推荐的房间id
|
||||
}
|
||||
|
||||
// AllocReplayCode 获取回访码
|
||||
|
|
Loading…
Reference in New Issue