Compare commits

..

No commits in common. "bcbc162549eddb934d35044af9e27522a6a18d8d" and "4d65851083ada20e2fbf3f2f2d998c4cf71835da" have entirely different histories.

14 changed files with 80 additions and 132 deletions

View File

@ -7,7 +7,6 @@ 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"
@ -642,15 +641,15 @@ func (this *Player) ReportGameEvent(param *ReportGameEventParam) *ReportGameEven
var gameTimes, gameFreeTimes int64
data, ok := this.GDatas[this.scene.KeyGamefreeId]
if ok {
gameFreeFirstTime = data.FirstTime
gameFreeTimes = data.Statics.GameTimes
gameFirstTime = data.FirstTime
gameTimes = data.Statics.GameTimes
}
// 记录玩家 首次参与该游戏时间 游戏次数(不区分场次)
dataGame, ok := this.GDatas[this.scene.KeyGameId]
if ok {
gameFirstTime = dataGame.FirstTime
gameTimes = dataGame.Statics.GameTimes
gameFreeFirstTime = dataGame.FirstTime
gameFreeTimes = dataGame.Statics.GameTimes
}
isNew := int32(0)
@ -669,13 +668,12 @@ func (this *Player) ReportGameEvent(param *ReportGameEventParam) *ReportGameEven
var ret ReportGameEventOnly
ret.Param = param
log := &model.PlayerGameRecEvent{
Id: primitive.NewObjectID().Hex(),
Platform: this.Platform,
RecordId: this.scene.GetRecordId(),
SnId: this.GetSnId(),
Channel: this.Channel,
ChannelId: this.ChannelId,
//City: this.City,
City: this.City,
OS: this.DeviceOS,
GameId: this.scene.GameId,
ModeId: this.scene.GameMode,
@ -688,12 +686,12 @@ func (this *Player) ReportGameEvent(param *ReportGameEventParam) *ReportGameEven
IsNew: isNew,
GameFreeID: this.scene.GetGameFreeId(),
GamingTime: int32(param.GameTime),
FirstTime: gameFreeFirstTime.Unix(),
PlayTimes: gameFreeTimes,
FirstGameTime: gameFirstTime.Unix(),
PlayGameTimes: gameTimes,
FirstTime: gameFirstTime.Unix(),
PlayTimes: gameTimes,
FirstGameTime: gameFreeFirstTime.Unix(),
PlayGameTimes: gameFreeTimes,
LastLoginTime: this.LastLoginTime.Unix(),
//DeviceId: this.DeviceId,
DeviceId: this.DeviceId,
}
if param.OnlyLog {
ret.Log = append(ret.Log, log)

View File

@ -245,35 +245,33 @@ func CreatePlayerLoginEvent(snid int32, channel, promoter, platform, city, os, i
// 玩家游戏记录
type PlayerGameRecEvent struct {
Id string //id
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 //金币变化,税后(正值为赢;负值为输)
Amount int64 //金币变化(正值为赢;负值为输)
CreateTime int64 //创建时间
CreateDayTime int64 //账号创建时间0点
ValidBet int64 //有效下注数量
ValidFlow int64 //有效流水数量
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 //最后登录时间
DeviceId string //设备id
ChannelId string //推广渠道id
}

View File

@ -30,12 +30,12 @@ import (
func init() {
common.RegisterClockFunc(&common.ClockFunc{
OnHourTimerFunc: func() {
ClientMgrSingleton.AccountReplace()
ClientMgrSingleton.HourChange()
logger.Logger.Info(ClientMgrSingleton.GetState())
logger.Logger.Infof("client state: %+v", ClientMgrSingleton.GetState())
},
OnDayTimerFunc: func() {
ClientMgrSingleton.AccountDeletePolicy()
ClientMgrSingleton.DayChange()
},
})
}
@ -110,17 +110,13 @@ func (this *ClientMgr) UnRegisterSession(acc string) {
delete(this.sessionPool, acc)
}
// AccountReplace 账号替换
func (this *ClientMgr) AccountReplace() {
func (this *ClientMgr) HourChange() {
fileModify := false
eventArr := this.CycleTimeEvent[time.Now().Hour()]
for _, event := range eventArr {
accChan[event.newAcc] = true //使用新的账号
//创建新的连接
NewSession()
// 关闭旧的连接
cfg := NewSessionConfig()
netlib.Connect(cfg) //创建新的连接
if session, ok := this.sessionPool[event.oldAcc]; ok && session != nil {
//删除旧有账号数据
pack := &serverproto.RWAccountInvalid{
@ -132,7 +128,6 @@ func (this *ClientMgr) AccountReplace() {
//关闭连接
session.Close()
}
//更新本地账号数据信息
for key, value := range accPool {
if value.Acc == event.oldAcc {
@ -161,8 +156,7 @@ func (this *ClientMgr) AccountReplace() {
}
}
// AccountDeletePolicy 账号删除策略
func (this *ClientMgr) AccountDeletePolicy() {
func (this *ClientMgr) DayChange() {
invalidCount := 0 //过期账号数量
updateLimit := len(accPool) * model.GameParamData.InvalidRobotAccRate / 100 //可更新的账号数量
invalidAccs := []InvalidAcc{}
@ -207,10 +201,6 @@ 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),

View File

@ -18,19 +18,12 @@ var (
WaitConnectSessions []*netlib.SessionConfig
)
// NewSession 新建session
// id 连接id, 默认自动分配
func NewSession(id ...int) {
cfg := Config.Connects
if len(id) > 0 && id[0] > 0 {
cfg.Id = id[0]
} else {
func NewSessionConfig() *netlib.SessionConfig {
BenchMarkModule.idx++
cfg := Config.Connects
cfg.Id = BenchMarkModule.idx
}
cfg.Init()
logger.Logger.Info("waite connect session id=", cfg.Id)
WaitConnectSessions = append(WaitConnectSessions, &cfg)
return &cfg
}
type BenchMark struct {
@ -44,7 +37,9 @@ func (m *BenchMark) ModuleName() string {
func (m *BenchMark) Init() {
m.idx = RobotSessionStartId
for i := 0; i < Config.Count; i++ {
NewSession()
cfg := NewSessionConfig()
logger.Logger.Info("waite connect session id=", cfg.Id)
WaitConnectSessions = append(WaitConnectSessions, cfg)
}
}

View File

@ -62,7 +62,10 @@ func (g *GateSessionHandler) OnSessionClosed(s *netlib.Session) {
StopSessionPingTimer(s)
if reconnect {
logger.Logger.Infof("账号重连 sessionID:%v account:%v", s.Id, accIdParam)
NewSession(s.GetSessionConfig().Id)
cfg := Config.Connects
cfg.Id = s.GetSessionConfig().Id
cfg.Init()
WaitConnectSessions = append(WaitConnectSessions, &cfg)
}
}

View File

@ -16,9 +16,9 @@ type AccountData struct {
}
var (
// 待登录的账号,将要建立连接
// 待使用的账号,将要建立连接
accChan = make(map[string]bool)
// 账号池,当前正在使用的机器人账号
// 账号池,当前正在使用的机器人
accPool []*AccountData
)
var accountFileName = "robotaccount.json"

View File

@ -1,13 +1,12 @@
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"
@ -21,9 +20,6 @@ func init() {
OnMiniTimerFunc: func() {
PlayerMgrSingleton.OnMiniTimer()
},
OnHourTimerFunc: func() {
logger.Logger.Info(PlayerMgrSingleton.GetState())
},
})
}
@ -177,22 +173,3 @@ 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
}

View File

@ -1,7 +1,6 @@
package base
import (
"fmt"
"time"
"mongo.games.com/goserver/core/logger"
@ -17,7 +16,11 @@ func init() {
common.RegisterClockFunc(&common.ClockFunc{
OnHourTimerFunc: func() {
logger.Logger.Info(SceneMgrSingleton.GetState())
sceneState := map[int32]int{}
for _, v := range SceneMgrSingleton.Scenes {
sceneState[v.GetGameId()]++
}
logger.Logger.Infof("sceneState: %v", sceneState)
},
})
}
@ -68,22 +71,6 @@ 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]
// //////////////////////////////////////////////////////////////////

View File

@ -99,7 +99,6 @@ 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 {

View File

@ -52,7 +52,6 @@ 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
}

View File

@ -341,7 +341,10 @@ func (this *Scene) PlayerEnter(p *Player, pos int, ischangeroom bool) bool {
//离场金币
leaverng := this.dbGameFree.GetRobotLimitCoin()
if len(leaverng) >= 2 {
leaveCoin = int64(common.RandInt(int(leaverng[0]), int(leaverng[1])))
rangeValue := leaverng[1] - leaverng[0]
if rangeValue > 0 {
leaveCoin = leaverng[0] + rand.Int63n(rangeValue)
}
}
}

View File

@ -38,7 +38,6 @@ type SceneMgr struct {
matchAutoId int // 比赛场房间号
coinSceneAutoId int // 金币场房间号
hundredSceneAutoId int // 百人场房间号
password map[string]struct{} // 密码
pushList map[int]struct{} // 已经推荐过的房间列表
lastPushSceneId int // 最后推荐的房间id