game_sync/gamesrv/base/sysprofitcoinmgr.go

118 lines
3.1 KiB
Go

package base
import (
"fmt"
"time"
"mongo.games.com/goserver/core/basic"
"mongo.games.com/goserver/core/logger"
"mongo.games.com/goserver/core/module"
"mongo.games.com/goserver/core/task"
"mongo.games.com/game/common"
"mongo.games.com/game/model"
"mongo.games.com/game/protocol/webapi"
)
func init() {
module.RegisteModule(SysProfitCoinMgr, time.Hour, 0)
}
var SysProfitCoinMgr = &SysProfitCoinManager{}
// SysProfitCoinManager 存储
// 目前只有捕鱼用到
type SysProfitCoinManager struct {
SysPfCoin *model.SysProfitCoin
}
func (this *SysProfitCoinManager) GetBetAndSysOut(key string) (int64, int64) {
if data, exist := this.SysPfCoin.ProfitCoin[key]; exist {
return data.PlaysBet, data.SysPushCoin
}
return 1, 0
}
// PushBetAndSysOut 增加玩家总投入,系统总产出
func (this *SysProfitCoinManager) PushBetAndSysOut(key string, bet int64, systemOut int64) {
data, ok := this.SysPfCoin.ProfitCoin[key]
if !ok {
data = new(model.SysCoin)
this.SysPfCoin.ProfitCoin[key] = data
}
data.PlaysBet += bet
data.SysPushCoin += systemOut
}
func (this *SysProfitCoinManager) Get(key string) *model.SysCoin {
data, ok := this.SysPfCoin.ProfitCoin[key]
if !ok {
data = new(model.SysCoin)
this.SysPfCoin.ProfitCoin[key] = data
}
return data
}
func (this *SysProfitCoinManager) Del(key string) {
if _, ok := this.SysPfCoin.ProfitCoin[key]; ok {
delete(this.SysPfCoin.ProfitCoin, key)
}
}
func (this *SysProfitCoinManager) ModuleName() string {
return "SysProfitCoinManager"
}
func (this *SysProfitCoinManager) Init() {
this.SysPfCoin = model.InitSysProfitCoinData(fmt.Sprintf("%d", common.GetSelfSrvId()))
}
func (this *SysProfitCoinManager) Update() {
this.Save()
}
func (this *SysProfitCoinManager) Shutdown() {
this.Save()
module.UnregisteModule(this)
}
func (this *SysProfitCoinManager) Save() {
data := &model.SysProfitCoin{ //
ProfitCoin: make(map[string]*model.SysCoin),
LogId: this.SysPfCoin.LogId,
Key: this.SysPfCoin.Key,
}
for i, v := range this.SysPfCoin.ProfitCoin {
v1 := &model.SysCoin{ //
PlaysBet: v.PlaysBet,
SysPushCoin: v.SysPushCoin,
//CommonPool: v.CommonPool,
//Version: v.Version,
}
data.ProfitCoin[i] = v1
}
task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} {
err := model.SaveSysProfitCoin(data /*this.SysPfCoin*/) // fatal error: concurrent map iteration and map write
if err != nil {
logger.Logger.Errorf("SaveSysProfitCoin err:%v ", err)
}
return err
}), nil, "SaveSysProfitCoin").Start()
}
type CoinPoolFishListener struct {
}
func (f *CoinPoolFishListener) OnSettingUpdate(oldSetting, newSetting *webapi.CoinPoolSetting) {
//GameFree := srvdata.PBDB_GameFreeMgr.GetData(newSetting.GetGameFreeId())
//if GameFree != nil {
// gameId := int(GameFree.GetGameId())
// if gameId == common.GameId_HFishing || gameId == common.GameId_TFishing {
// if oldSetting == nil || oldSetting.GetCtroRate() != newSetting.GetCtroRate() {
// keyPf := fmt.Sprintf("%v_%v", newSetting.GetPlatform(), newSetting.GetGameFreeId())
// SysProfitCoinMgr.Del(keyPf)
// }
// }
//}
}