193 lines
5.5 KiB
Go
193 lines
5.5 KiB
Go
package main
|
|
|
|
import (
|
|
"mongo.games.com/game/common"
|
|
"mongo.games.com/game/webapi"
|
|
"mongo.games.com/goserver/core"
|
|
"mongo.games.com/goserver/core/netlib"
|
|
"mongo.games.com/goserver/core/transact"
|
|
"mongo.games.com/goserver/srvlib"
|
|
"sort"
|
|
"strconv"
|
|
"time"
|
|
)
|
|
|
|
var QueryAllCoinPoolTimeOut = time.Second * 30
|
|
|
|
const (
|
|
QueryAllCoinPoolTransactParam_ParentNode int = iota
|
|
QueryAllCoinPoolTransactParam_Data
|
|
QueryAllCoinPoolTransactParam_Total
|
|
)
|
|
|
|
type QueryAllCoinPoolTransactHandler struct {
|
|
}
|
|
|
|
func (this *QueryAllCoinPoolTransactHandler) OnExcute(tNode *transact.TransNode, ud interface{}) transact.TransExeResult {
|
|
//logger.Logger.Trace("QueryAllCoinPoolTransactHandler.OnExcute ")
|
|
for sid, gs := range GameSessMgrSington.servers {
|
|
if gs.srvType == srvlib.GameServerType {
|
|
tnp := &transact.TransNodeParam{
|
|
Tt: common.TransType_QueryAllCoinPool,
|
|
Ot: transact.TransOwnerType(srvlib.GameServerType),
|
|
Oid: sid,
|
|
AreaID: common.GetSelfAreaId(),
|
|
Tct: transact.TransactCommitPolicy_SelfDecide,
|
|
}
|
|
tNode.StartChildTrans(tnp, ud, QueryAllCoinPoolTimeOut)
|
|
}
|
|
}
|
|
|
|
return transact.TransExeResult_Success
|
|
}
|
|
|
|
func (this *QueryAllCoinPoolTransactHandler) OnCommit(tNode *transact.TransNode) transact.TransExeResult {
|
|
//logger.Logger.Trace("QueryAllCoinPoolTransactHandler.OnCommit ")
|
|
field := tNode.TransEnv.GetField(QueryAllCoinPoolTransactParam_Data)
|
|
parent := tNode.TransEnv.GetField(QueryAllCoinPoolTransactParam_ParentNode)
|
|
Total := tNode.TransEnv.GetField(QueryAllCoinPoolTransactParam_Total)
|
|
if tParent, ok := parent.(*transact.TransNode); ok {
|
|
resp := webapi.NewResponseBody()
|
|
resp[webapi.RESPONSE_STATE] = webapi.STATE_OK
|
|
if settings, ok := field.(map[string]*common.PlatformStates); ok {
|
|
//根据平台id排序
|
|
//map排序
|
|
keys := []int{}
|
|
for k := range settings {
|
|
id, err := strconv.Atoi(k)
|
|
if err == nil {
|
|
keys = append(keys, id)
|
|
}
|
|
}
|
|
sort.Ints(keys)
|
|
info := []*common.PlatformStates{}
|
|
for _, id := range keys {
|
|
info = append(info, settings[strconv.Itoa(id)])
|
|
}
|
|
resp[webapi.RESPONSE_DATA] = info
|
|
}
|
|
resp[webapi.RESPONSE_TOTAL] = Total
|
|
dataResp := &common.M2GWebApiResponse{}
|
|
dataResp.Body, _ = resp.Marshal()
|
|
tParent.TransRep.RetFiels = dataResp
|
|
tParent.Resume()
|
|
}
|
|
return transact.TransExeResult_Success
|
|
}
|
|
|
|
func (this *QueryAllCoinPoolTransactHandler) OnRollBack(tNode *transact.TransNode) transact.TransExeResult {
|
|
//logger.Logger.Trace("QueryAllCoinPoolTransactHandler.OnRollBack ")
|
|
return transact.TransExeResult_Success
|
|
}
|
|
func (this *QueryAllCoinPoolTransactHandler) OnChildTransRep(tNode *transact.TransNode, hChild transact.TransNodeID,
|
|
retCode int, ud interface{}) transact.TransExeResult {
|
|
//logger.Logger.Trace("QueryAllCoinPoolTransactHandler.OnChildTransRep ")
|
|
if ud != nil {
|
|
settings := make(map[string]*common.PlatformStates)
|
|
err := netlib.UnmarshalPacketNoPackId(ud.([]byte), &settings)
|
|
if err == nil {
|
|
field := tNode.TransEnv.GetField(QueryAllCoinPoolTransactParam_Data)
|
|
if field == nil {
|
|
tNode.TransEnv.SetField(QueryAllCoinPoolTransactParam_Data, settings)
|
|
} else {
|
|
if arr, ok := field.(map[string]*common.PlatformStates); ok {
|
|
//arr是第一个game返回的值
|
|
for k, newpf := range settings {
|
|
if oldpf, ok := arr[k]; ok {
|
|
for m, newg := range newpf.GamesVal {
|
|
if oldg, gok := oldpf.GamesVal[m]; gok {
|
|
if newg.States > oldg.States {
|
|
oldg.States = newg.States
|
|
oldg.CoinValue = newg.CoinValue
|
|
oldg.LowerLimit = newg.LowerLimit
|
|
oldg.UpperLimit = newg.UpperLimit
|
|
|
|
}
|
|
} else {
|
|
//找不到游戏
|
|
arr[k].GamesVal[m] = newg
|
|
}
|
|
}
|
|
} else {
|
|
//找不到pf
|
|
arr[k] = newpf
|
|
}
|
|
}
|
|
tNode.TransEnv.SetField(QueryAllCoinPoolTransactParam_Data, arr)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return transact.TransExeResult_Success
|
|
}
|
|
|
|
func StartQueryCoinPoolStatesTransact(tParent *transact.TransNode, pageNo, pageSize int32) {
|
|
tnp := &transact.TransNodeParam{
|
|
Tt: common.TransType_QueryAllCoinPool,
|
|
Ot: transact.TransOwnerType(common.GetSelfSrvType()),
|
|
Oid: common.GetSelfSrvId(),
|
|
AreaID: common.GetSelfAreaId(),
|
|
}
|
|
|
|
Platforms := PlatformMgrSingleton.GetPlatforms()
|
|
|
|
//map排序
|
|
var keys []int
|
|
for _, v := range Platforms {
|
|
//平台是否开启
|
|
if !v.Disable {
|
|
id, err := strconv.Atoi(v.IdStr)
|
|
if err == nil {
|
|
keys = append(keys, id)
|
|
}
|
|
}
|
|
}
|
|
sort.Ints(keys)
|
|
|
|
if pageNo <= 0 {
|
|
pageNo = 1
|
|
}
|
|
end := pageNo * pageSize
|
|
start := end - pageSize
|
|
n := int32(len(keys))
|
|
if start > n || end > n {
|
|
start = 0
|
|
end = 100
|
|
}
|
|
if end > n {
|
|
end = n
|
|
}
|
|
//当前页所有的平台id
|
|
NeedPlatforms := keys[start:end]
|
|
games := make(map[string][]*common.GamesIndex)
|
|
for _, platform := range NeedPlatforms {
|
|
//获取当前所有平台下的gameid
|
|
pf := strconv.Itoa(platform)
|
|
//加载配置
|
|
gps := PlatformMgrSingleton.GetGameFrees(pf)
|
|
for _, v := range gps {
|
|
//获取所有开启的游戏
|
|
if v.Status && v.DbGameFree.Id%10 != 4 {
|
|
g := &common.GamesIndex{}
|
|
g.GameFreeId = v.DbGameFree.Id
|
|
g.GroupId = v.GroupId
|
|
games[pf] = append(games[pf], g)
|
|
}
|
|
}
|
|
}
|
|
ud := &common.QueryGames{
|
|
Index: games,
|
|
}
|
|
tNode := transact.DTCModule.StartTrans(tnp, ud, QueryAllCoinPoolTimeOut)
|
|
if tNode != nil {
|
|
tNode.TransEnv.SetField(QueryAllCoinPoolTransactParam_ParentNode, tParent)
|
|
tNode.TransEnv.SetField(QueryAllCoinPoolTransactParam_Total, n)
|
|
tNode.Go(core.CoreObject())
|
|
}
|
|
}
|
|
|
|
func init() {
|
|
transact.RegisteHandler(common.TransType_QueryAllCoinPool, &QueryAllCoinPoolTransactHandler{})
|
|
}
|