actor_deliver.go 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. package mapExchange
  2. import (
  3. "f1-game/internal/code"
  4. "f1-game/internal/enum"
  5. nameRemote "f1-game/internal/name/remote"
  6. "f1-game/internal/pb"
  7. mapCall "f1-game/nodes/map/internal/call"
  8. "f1-game/nodes/map/internal/db"
  9. clog "github.com/cherry-game/cherry/logger"
  10. cactor "github.com/cherry-game/cherry/net/actor"
  11. )
  12. // 交易所发货子actor
  13. type actorDeliver struct {
  14. cactor.Base
  15. }
  16. func newActorDeliver(tables map[int64]*db.MapExchangeDeliverTable) *actorDeliver {
  17. actorDeliver := &actorDeliver{}
  18. // 有未完成发货的记录
  19. if len(tables) > 0 {
  20. // TODO: 处理未完成的发货记录
  21. clog.Infof("Found %d uncompleted delivery records", len(tables))
  22. }
  23. return actorDeliver
  24. }
  25. func (p *actorDeliver) OnInit() {
  26. p.Remote().Register(nameRemote.MapExchange_ItemDeliver, p.itemDeliver)
  27. }
  28. // 交易记录发货
  29. func (p *actorDeliver) itemDeliver(req *pb.ExchangeDeliverDetail) {
  30. var (
  31. buyPlayerID = req.PlayerID // 买方玩家ID
  32. sellPlayerID = req.Detail.PlayerID // 卖方玩家ID
  33. transID = req.Detail.TransactionID // 交易ID
  34. itemID = req.Detail.Asset.Id // 商品ID
  35. price = req.Detail.Price // 单价
  36. count = req.Count // 交易数量
  37. wishPrice = req.WishPrice // 求购单价
  38. )
  39. //创建买方发货记录
  40. buyExchangeDeliverTable := db.NewMapExchangeDeliverTable(buyPlayerID, transID, itemID, price, count, true)
  41. buyExchangeDeliverTable.WithWishPrice(wishPrice)
  42. buyExchangeDeliverTable.Save2Queue()
  43. //创建卖方发货记录
  44. sellExchangeDeliverTable := db.NewMapExchangeDeliverTable(sellPlayerID, transID, itemID, price, count, false)
  45. sellExchangeDeliverTable.Save2Queue()
  46. // 给买家发货
  47. errCode := mapCall.Player.ExchangeItemDeliver(buyExchangeDeliverTable.ToProto())
  48. if code.IsOK(errCode) {
  49. buyExchangeDeliverTable.Status = enum.ExchangeDeliverStatus_Successed
  50. buyExchangeDeliverTable.Save2Queue()
  51. clog.Infof("buy player exchange item deliver successed. playerID: %d, ID: %d, status: %d", buyExchangeDeliverTable.PlayerID, buyExchangeDeliverTable.ID, buyExchangeDeliverTable.Status)
  52. } else {
  53. buyExchangeDeliverTable.Status = enum.ExchangeDeliverStatus_Failed
  54. buyExchangeDeliverTable.Save2Queue()
  55. clog.Warnf("buy player exchange item deliver failed. playerID: %d, ID: %d, errCode: %d", buyExchangeDeliverTable.PlayerID, buyExchangeDeliverTable.ID, errCode)
  56. }
  57. // 给卖家发货
  58. errCode = mapCall.Player.ExchangeItemDeliver(sellExchangeDeliverTable.ToProto())
  59. if code.IsOK(errCode) {
  60. sellExchangeDeliverTable.Status = enum.ExchangeDeliverStatus_Successed
  61. sellExchangeDeliverTable.Save2Queue()
  62. clog.Infof("sell player exchange item deliver successed. playerID: %d, ID: %d, status: %d", sellExchangeDeliverTable.PlayerID, sellExchangeDeliverTable.ID, sellExchangeDeliverTable.Status)
  63. } else {
  64. sellExchangeDeliverTable.Status = enum.ExchangeDeliverStatus_Failed
  65. sellExchangeDeliverTable.Save2Queue()
  66. clog.Warnf("sell player exchange item deliver failed. playerID: %d, ID: %d, errCode: %d", sellExchangeDeliverTable.PlayerID, sellExchangeDeliverTable.ID, errCode)
  67. }
  68. }