void MultNonFungibleUserStateProcess(string eventType, string fromAddr, string toAddr, List <LBD.TokenInfo> tokenInfos) { if (eventType == "mint_nft") { user.NonFungibleToken_Add(tokenInfos); if (user.stateType == UserStateType.NewUserConnect) { // In Consloe, the currency to be used in advance in the operating wallet must be minted. user.OperatorFungibleMint(Resource.PriceType.Coin, 1000); } else if (user.stateType == UserStateType.BuyNonFungible) { if (tokenInfos.Count > 0) { user.OnMintBuyShopSlot(tokenInfos); } } } else if (eventType == "transfer_nft" || eventType == "transfer_nft_from") { if (user.stateType == UserStateType.BuyerGiveGoods) { var buyerData = TradingManager.Instance.GetBuyerDataAndRemove(user.UID); var goods = buyerData.goods; TradingManager.Instance.InsertTradeHistory(goods, TcpMsg.TradeStatus.Soldout, buyerData.uuid, buyerData.nickName); var fromUser = NetServer.WalletAddressToFindUser(fromAddr); if (null != fromUser) { NetServer.InternalHandleMessageByUid(new InternalMsg.IntlMsg_BuyerGiveGoods() { uid = fromUser.UID, guid = fromUser.Id.ToString(), goodsSeq = goods.seq, touuid = user.UID }); } user.NonFungibleToken_Add(tokenInfos); var ackData = new TcpMsg.AckTradeBuyerGiveGoods() { goodsSeq = goods.seq, fromuuid = goods.uuid, touuid = user.UID, cardInfo = User.TokenInfoToCardInfo(tokenInfos[0]), currencyinfos = user.ToCurrencyInfoList() }; user.Send(new Packet(ackData)); } } }
void FungibleTransferUserStateProcess(string fromAddr, string toAddr, List <LBD.TokenInfo> tokenInfos) { if (null != tokenInfos && tokenInfos.Count > 0) { switch (user.stateType) { case UserStateType.NewUserConnect: { tokenInfos.ForEach(x => { user.FungibleTokenTransfer(x.tokenType, x.amount); user.Currency_SetPrice(x.tokenType, x.amount); }); user.OperatorServiceTokenMint(1000); } break; case UserStateType.RegisterTradeGoodsFees: { tokenInfos.ForEach(x => { user.FungibleTokenTransfer(x.tokenType, -x.amount); user.Currency_SetPrice(x.tokenType, -x.amount); }); var tblTrade = TradingManager.Instance.RegisterTradeGoods(user.UID); user.RegisterTradeGoodsSucess(tblTrade); } break; case UserStateType.SellerPayments: { tokenInfos.ForEach(x => { user.FungibleTokenTransfer(x.tokenType, -x.amount); user.Currency_SetPrice(x.tokenType, -x.amount); }); var toUser = NetServer.WalletAddressToFindUser(toAddr); if (null != toUser) { NetServer.InternalHandleMessageByUid(new InternalMsg.IntlMsg_SellerPayments() { uid = toUser.UID, guid = toUser.Id.ToString(), fromUserUid = user.UID, tokenType = tokenInfos[0].tokenType, amount = tokenInfos[0].amount }); } var buyerData = TradingManager.Instance.GetBuyerData(user.UID); var goods = buyerData.goods; user.stateType = UserStateType.BuyerGiveGoods; LBD.LBDApiManager.Instance.AddLBDCmd(new LBD.Msg.LBDMsg_UserId_NonFungible_Transfer() { uid = user.UID, guid = user.Id.ToString(), fromUserId = goods.userid, toAddr = string.Empty, toUserId = user.lineUID, tokenType = goods.tokentype, tokenIndex = goods.tokenidx }); } break; case UserStateType.BuyFungible: { tokenInfos.ForEach(x => user.FungibleTokenTransfer(x.tokenType, x.amount)); var currency = tokenInfos.ToDictionary(x => x.tokenType, x => (Int64)x.amount); user.OnMintBuyShopSlot(currency); } break; case UserStateType.BuyShopSlot: { tokenInfos.ForEach(x => user.FungibleTokenTransfer(x.tokenType, -x.amount)); user.OnBurnShopSlot(tokenInfos); } break; case UserStateType.RefreshShopCardSlot: { tokenInfos.ForEach(x => user.FungibleTokenTransfer(x.tokenType, -x.amount)); user.OnBurnRefreshShopCardSlot(tokenInfos); } break; default: break; } } else { logger.Warn($"transfer_ft userUid={user.UID} tokenInfo is null~~"); } }