| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- package mapExchange
- import (
- "f1-game/internal/code"
- "f1-game/internal/enum"
- nameRemote "f1-game/internal/name/remote"
- "f1-game/internal/pb"
- mapCall "f1-game/nodes/map/internal/call"
- "f1-game/nodes/map/internal/db"
- clog "github.com/cherry-game/cherry/logger"
- cactor "github.com/cherry-game/cherry/net/actor"
- )
- // 交易所发货子actor
- type actorDeliver struct {
- cactor.Base
- }
- func newActorDeliver(tables map[int64]*db.MapExchangeDeliverTable) *actorDeliver {
- actorDeliver := &actorDeliver{}
- // 有未完成发货的记录
- if len(tables) > 0 {
- // TODO: 处理未完成的发货记录
- clog.Infof("Found %d uncompleted delivery records", len(tables))
- }
- return actorDeliver
- }
- func (p *actorDeliver) OnInit() {
- p.Remote().Register(nameRemote.MapExchange_ItemDeliver, p.itemDeliver)
- }
- // 交易记录发货
- func (p *actorDeliver) itemDeliver(req *pb.ExchangeDeliverDetail) {
- var (
- buyPlayerID = req.PlayerID // 买方玩家ID
- sellPlayerID = req.Detail.PlayerID // 卖方玩家ID
- transID = req.Detail.TransactionID // 交易ID
- itemID = req.Detail.Asset.Id // 商品ID
- price = req.Detail.Price // 单价
- count = req.Count // 交易数量
- wishPrice = req.WishPrice // 求购单价
- )
- //创建买方发货记录
- buyExchangeDeliverTable := db.NewMapExchangeDeliverTable(buyPlayerID, transID, itemID, price, count, true)
- buyExchangeDeliverTable.WithWishPrice(wishPrice)
- buyExchangeDeliverTable.Save2Queue()
- //创建卖方发货记录
- sellExchangeDeliverTable := db.NewMapExchangeDeliverTable(sellPlayerID, transID, itemID, price, count, false)
- sellExchangeDeliverTable.Save2Queue()
- // 给买家发货
- errCode := mapCall.Player.ExchangeItemDeliver(buyExchangeDeliverTable.ToProto())
- if code.IsOK(errCode) {
- buyExchangeDeliverTable.Status = enum.ExchangeDeliverStatus_Successed
- buyExchangeDeliverTable.Save2Queue()
- clog.Infof("buy player exchange item deliver successed. playerID: %d, ID: %d, status: %d", buyExchangeDeliverTable.PlayerID, buyExchangeDeliverTable.ID, buyExchangeDeliverTable.Status)
- } else {
- buyExchangeDeliverTable.Status = enum.ExchangeDeliverStatus_Failed
- buyExchangeDeliverTable.Save2Queue()
- clog.Warnf("buy player exchange item deliver failed. playerID: %d, ID: %d, errCode: %d", buyExchangeDeliverTable.PlayerID, buyExchangeDeliverTable.ID, errCode)
- }
- // 给卖家发货
- errCode = mapCall.Player.ExchangeItemDeliver(sellExchangeDeliverTable.ToProto())
- if code.IsOK(errCode) {
- sellExchangeDeliverTable.Status = enum.ExchangeDeliverStatus_Successed
- sellExchangeDeliverTable.Save2Queue()
- clog.Infof("sell player exchange item deliver successed. playerID: %d, ID: %d, status: %d", sellExchangeDeliverTable.PlayerID, sellExchangeDeliverTable.ID, sellExchangeDeliverTable.Status)
- } else {
- sellExchangeDeliverTable.Status = enum.ExchangeDeliverStatus_Failed
- sellExchangeDeliverTable.Save2Queue()
- clog.Warnf("sell player exchange item deliver failed. playerID: %d, ID: %d, errCode: %d", sellExchangeDeliverTable.PlayerID, sellExchangeDeliverTable.ID, errCode)
- }
- }
|