81 lines
2.5 KiB
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{})
|
|
}
|