game_sync/worldsrv/mq_coinlog.go

91 lines
2.3 KiB
Go

package main
import (
"encoding/json"
"mongo.games.com/goserver/core"
"mongo.games.com/goserver/core/basic"
"mongo.games.com/goserver/core/broker"
"mongo.games.com/goserver/core/broker/rabbitmq"
"mongo.games.com/goserver/core/logger"
"mongo.games.com/game/common"
"mongo.games.com/game/model"
"mongo.games.com/game/mq"
)
func init() {
mq.RegisterSubscriber(model.TopicProbeCoinLogAck, func(e broker.Event) (err error) {
msg := e.Message()
if msg != nil {
defer func() {
e.Ack()
}()
var log model.CoinLog
err = json.Unmarshal(msg.Body, &log)
if err != nil {
return
}
//通知主线程执行后续操作
core.CoreObject().SendCommand(basic.CommandWrapper(func(o *basic.Object) error {
player := PlayerMgrSington.GetPlayerBySnId(log.SnId)
if player != nil {
player.Coin += log.RestCount
player.SyncGameCoin(int(log.RoomId), log.SeqNo)
}
return nil
}), true)
return
}
return nil
}, broker.Queue(model.TopicProbeCoinLogAck), rabbitmq.DurableQueue())
// 邀请数据同步
mq.RegisterSubscriber(model.EvtInviteAck, func(e broker.Event) error {
msg := e.Message()
if msg != nil {
defer func() {
e.Ack()
}()
var log model.EvtInviteAckMsg
err := json.Unmarshal(msg.Body, &log)
if err != nil {
return err
}
logger.Logger.Tracef("EvtInviteAckMsg: %+v", log)
//通知主线程执行后续操作
core.CoreObject().SendCommand(basic.CommandWrapper(func(o *basic.Object) error {
player := PlayerMgrSington.GetPlayerBySnId(log.Snid)
if player != nil {
// 邀请数量
player.INum = log.Num
player.ResetTaskN(common.TaskTypeInviteNum)
TaskSubjectSingleton.Touch(common.TaskTypeInviteNum, &TaskData{SnId: player.SnId, Num: player.INum})
// 邀请积分
player.IScore = log.Score
player.ResetTaskN(common.TaskTypeInviteScore)
TaskSubjectSingleton.Touch(common.TaskTypeInviteScore, &TaskData{
SnId: player.SnId,
Num: log.Score,
})
// 充值金额
player.IMoney = log.Money
player.ResetTaskN(common.TaskTypeInviteRecharge)
TaskSubjectSingleton.Touch(common.TaskTypeInviteRecharge, &TaskData{
SnId: player.SnId,
Num: log.Money,
})
}
return nil
}), true)
}
return nil
}, broker.Queue(model.EvtInviteAck), rabbitmq.DurableQueue())
}