208 lines
5.8 KiB
Go
208 lines
5.8 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"math/rand"
|
|
"time"
|
|
|
|
"mongo.games.com/game/common"
|
|
"mongo.games.com/game/gamerule/crash"
|
|
"mongo.games.com/game/mq"
|
|
"mongo.games.com/goserver/core/broker/rabbitmq"
|
|
|
|
"sync"
|
|
|
|
"github.com/astaxie/beego/cache"
|
|
"mongo.games.com/game/model"
|
|
"mongo.games.com/game/webapi"
|
|
"mongo.games.com/goserver/core"
|
|
"mongo.games.com/goserver/core/logger"
|
|
"mongo.games.com/goserver/core/utils"
|
|
)
|
|
|
|
type ParalleFunc func() error
|
|
|
|
var CacheMemory cache.Cache
|
|
var wgParalleLoad = &sync.WaitGroup{}
|
|
var ParalleLoadModules []*ParalleLoadModule
|
|
var RabbitMQPublisher *mq.RabbitMQPublisher
|
|
var RabbitMqConsumer *mq.RabbitMQConsumer
|
|
|
|
type ParalleLoadModule struct {
|
|
name string
|
|
f ParalleFunc
|
|
}
|
|
|
|
func RegisterParallelLoadFunc(name string, f ParalleFunc) {
|
|
ParalleLoadModules = append(ParalleLoadModules, &ParalleLoadModule{name: name, f: f})
|
|
}
|
|
|
|
func init() {
|
|
rand.Seed(time.Now().UnixNano())
|
|
|
|
//首先加载游戏配置
|
|
core.RegisteHook(core.HOOK_BEFORE_START, func() error {
|
|
model.StartupRPClient(common.CustomConfig.GetString("MgoRpcCliNet"), common.CustomConfig.GetString("MgoRpcCliAddr"), time.Duration(common.CustomConfig.GetInt("MgoRpcCliReconnInterV"))*time.Second)
|
|
model.InitGameParam()
|
|
model.InitNormalParam()
|
|
|
|
hs := model.GetCrashHash(0)
|
|
if hs == nil {
|
|
for i := 0; i < crash.POKER_CART_CNT; i++ {
|
|
model.InsertCrashHash(i, crash.Sha256(fmt.Sprintf("%v%v", i, time.Now().UnixNano())))
|
|
}
|
|
hs = model.GetCrashHash(0)
|
|
}
|
|
model.GameParamData.InitGameHash = []string{}
|
|
for _, v := range hs {
|
|
model.GameParamData.InitGameHash = append(model.GameParamData.InitGameHash, v.Hash)
|
|
}
|
|
hsatom := model.GetCrashHashAtom(0)
|
|
if hsatom == nil {
|
|
for i := 0; i < crash.POKER_CART_CNT; i++ {
|
|
model.InsertCrashHashAtom(i, crash.Sha256(fmt.Sprintf("%v%v", i, time.Now().UnixNano())))
|
|
}
|
|
hsatom = model.GetCrashHashAtom(0)
|
|
}
|
|
model.GameParamData.AtomGameHash = []string{}
|
|
for _, v := range hsatom {
|
|
model.GameParamData.AtomGameHash = append(model.GameParamData.AtomGameHash, v.Hash)
|
|
}
|
|
//if len(model.GameParamData.AtomGameHash) < crash.POKER_CART_CNT ||
|
|
// len(model.GameParamData.InitGameHash) < crash.POKER_CART_CNT {
|
|
// panic(errors.New("hash is read error"))
|
|
//}
|
|
return nil
|
|
})
|
|
|
|
//RegisterParallelLoadFunc("平台红包数据", func() error {
|
|
// actRandCoinMgr.LoadPlatformData()
|
|
// return nil
|
|
//})
|
|
|
|
RegisterParallelLoadFunc("GMAC", func() error {
|
|
model.InitGMAC()
|
|
return nil
|
|
})
|
|
|
|
RegisterParallelLoadFunc("三方游戏配置", func() error {
|
|
model.InitGameConfig()
|
|
return nil
|
|
})
|
|
|
|
RegisterParallelLoadFunc("GameKVData", func() error {
|
|
model.InitGameKVData()
|
|
return nil
|
|
})
|
|
|
|
RegisterParallelLoadFunc("水池配置", func() error {
|
|
return model.GetAllCoinPoolSettingData()
|
|
})
|
|
|
|
RegisterParallelLoadFunc("三方平台热载数据设置", func() error {
|
|
f := func() {
|
|
webapi.ReqCgAddr = model.GameParamData.CgAddr
|
|
if plt, ok := webapi.ThridPlatformMgrSington.ThridPlatformMap.Load("XHJ平台"); ok {
|
|
//plt.(*webapi.XHJThridPlatform).IsNeedCheckQuota = model.GameParamData.FGCheckPlatformQuota
|
|
plt.(*webapi.XHJThridPlatform).ReqTimeOut = model.GameParamData.ThirdPltReqTimeout
|
|
}
|
|
}
|
|
f()
|
|
model.GameParamData.Observers = append(model.GameParamData.Observers, f)
|
|
return nil
|
|
})
|
|
|
|
core.RegisteHook(core.HOOK_BEFORE_START, func() error {
|
|
|
|
//for _, v := range data {
|
|
// PlatformMgrSingleton.UpsertPlatform(v.Name, v.Isolated, v.GameStatesData)
|
|
//}
|
|
|
|
//ps := []model.GamePlatformState{model.GamePlatformState{LogicId:130000001,Param:"",State:1},model.GamePlatformState{LogicId:150000001,Param:"",State:1}}
|
|
|
|
//model.InsertPlatformGameConfig("360",true,ps)
|
|
|
|
var err error
|
|
CacheMemory, err = cache.NewCache("memory", `{"interval":60}`)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
//etcd打开连接
|
|
EtcdMgrSington.Init()
|
|
|
|
//go func() {
|
|
// for {
|
|
// time.Sleep(time.Minute)
|
|
// EtcdMgrSington.Reset()
|
|
// }
|
|
//}()
|
|
|
|
//rabbitmq打开链接
|
|
RabbitMQPublisher = mq.NewRabbitMQPublisher(common.CustomConfig.GetString("RabbitMQURL"), rabbitmq.Exchange{Name: common.CustomConfig.GetString("RMQExchange"), Durable: true}, common.CustomConfig.GetInt("RMQPublishBacklog"))
|
|
if RabbitMQPublisher != nil {
|
|
err = RabbitMQPublisher.Start()
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
}
|
|
|
|
RabbitMqConsumer = mq.NewRabbitMQConsumer(common.CustomConfig.GetString("RabbitMQURL"), rabbitmq.Exchange{Name: common.CustomConfig.GetString("RMQExchange"), Durable: true})
|
|
if RabbitMqConsumer != nil {
|
|
RabbitMqConsumer.Start()
|
|
}
|
|
|
|
//开始并行加载数据
|
|
//改为串行加载,后台并发有点扛不住
|
|
if len(ParalleLoadModules) > 0 {
|
|
tStart := time.Now()
|
|
logger.Logger.Infof("===[开始串行加载]===")
|
|
//wgParalleLoad.Add(paralleCnt)
|
|
for _, m := range ParalleLoadModules {
|
|
/*go*/ func(plm *ParalleLoadModule) {
|
|
ts := time.Now()
|
|
defer func() {
|
|
utils.DumpStackIfPanic(plm.name)
|
|
//wgParalleLoad.Done()
|
|
logger.Logger.Infof("[串行加载结束][%v] 耗时[%v]", plm.name, time.Now().Sub(ts))
|
|
}()
|
|
logger.Logger.Infof("[开始串行加载][%v] ", plm.name)
|
|
|
|
err := plm.f()
|
|
if err != nil {
|
|
logger.Logger.Warnf("[串行加载][%v][error:%v]", plm.name, err)
|
|
}
|
|
}(m)
|
|
}
|
|
//wgParalleLoad.Wait()
|
|
logger.Logger.Infof("===[串行加载结束,总耗时:%v]===", time.Now().Sub(tStart))
|
|
}
|
|
return nil
|
|
})
|
|
|
|
core.RegisteHook(core.HOOK_AFTER_STOP, func() error {
|
|
//etcd关闭连接
|
|
EtcdMgrSington.Shutdown()
|
|
//关闭rabbitmq连接
|
|
if RabbitMQPublisher != nil {
|
|
RabbitMQPublisher.Stop()
|
|
}
|
|
|
|
if RabbitMqConsumer != nil {
|
|
RabbitMqConsumer.Stop()
|
|
}
|
|
|
|
//model.ShutdownRPClient()
|
|
return nil
|
|
})
|
|
//core.RegisteHook(core.HOOK_BEFORE_START, func() error {
|
|
// ThirdPltGameMappingConfig.Init()
|
|
// return nil
|
|
//})
|
|
//RegisterParallelLoadFunc("分层配置数据", func() error {
|
|
// //加载分层配置
|
|
// LogicLevelMgrSington.LoadConfig()
|
|
// return nil
|
|
//})
|
|
}
|