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) } }