game_sync/gamesrv/transact/transact_addcoin.go

81 lines
2.5 KiB
Go

package transact
import (
"mongo.games.com/game/common"
"mongo.games.com/game/gamesrv/base"
"mongo.games.com/goserver/core/logger"
"mongo.games.com/goserver/core/netlib"
"mongo.games.com/goserver/core/transact"
)
const (
TRANSACT_ADDCOIN_CTX = iota
)
type AddCoinTransactHandler struct {
}
func (this *AddCoinTransactHandler) OnExcute(tNode *transact.TransNode, ud interface{}) transact.TransExeResult {
logger.Logger.Trace("AddCoinTransactHandler.OnExcute ")
ctx := &common.WGAddCoin{}
err := netlib.UnmarshalPacketNoPackId(ud.([]byte), ctx)
if err != nil {
logger.Logger.Trace("AddCoinTransactHandler.OnExcute failed:", err)
return transact.TransExeResult_Failed
}
p := base.PlayerMgrSington.GetPlayerBySnId(ctx.SnId)
if p != nil {
s := p.GetScene()
if s != nil {
sp := s.GetScenePolicy()
if sp != nil && sp.CanAddCoin(s, p, ctx.Coin) {
p.AddCoinAsync(ctx.Coin, ctx.GainWay, true, ctx.Broadcast, ctx.Oper, ctx.Remark, ctx.WriteLog)
//触发下事件
sp.OnPlayerEvent(s, p, base.PlayerEventRecharge, []int64{ctx.Coin})
//
tNode.TransEnv.SetField(TRANSACT_ADDCOIN_CTX, ctx)
tNode.TransRep.RetFiels = p.Coin
return transact.TransExeResult_Success
}
}
}
return transact.TransExeResult_Failed
}
func (this *AddCoinTransactHandler) OnCommit(tNode *transact.TransNode) transact.TransExeResult {
logger.Logger.Trace("AddCoinTransactHandler.OnCommit ")
return transact.TransExeResult_Success
}
func (this *AddCoinTransactHandler) OnRollBack(tNode *transact.TransNode) transact.TransExeResult {
logger.Logger.Trace("AddCoinTransactHandler.OnRollBack ")
ud := tNode.TransEnv.GetField(TRANSACT_ADDCOIN_CTX)
if ctx, ok := ud.(*common.WGAddCoin); ok {
p := base.PlayerMgrSington.GetPlayerBySnId(ctx.SnId)
if p != nil {
s := p.GetScene()
if s != nil {
sp := s.GetScenePolicy()
if sp != nil && sp.CanAddCoin(s, p, -ctx.Coin) {
p.AddCoinAsync(-ctx.Coin, ctx.GainWay, true, ctx.Broadcast, ctx.Oper, ctx.Remark, ctx.WriteLog)
//触发下事件
sp.OnPlayerEvent(s, p, base.PlayerEventRecharge, []int64{0})
return transact.TransExeResult_Success
}
}
}
}
return transact.TransExeResult_Success
}
func (this *AddCoinTransactHandler) OnChildTransRep(tNode *transact.TransNode, hChild transact.TransNodeID,
retCode int, ud interface{}) transact.TransExeResult {
logger.Logger.Trace("AddCoinTransactHandler.OnChildTransRep ")
return transact.TransExeResult_Success
}
func init() {
transact.RegisteHandler(common.TransType_AddCoin, &AddCoinTransactHandler{})
}