public void RemoveComposableTokenInfo(LBD.TokenInfo ptokenInfo, LBD.TokenInfo ctokenInfo) { var deckInfo = deckInfos.Find(x => x.GetDeckUid() == ptokenInfo.GetTokenId()); var ackData = new TcpMsg.AckDeckChildrenCardRemove(); if (null != deckInfo) { var removeToken = deckInfo.unitList.Find(x => x.GetCardID() == ctokenInfo.GetTokenId()); if (null != removeToken) { deckInfo.unitList.Remove(removeToken); ackData.deckInfo = deckInfo; } else { ackData.errCode = TcpMsg.Error.NotFoundTokenInfo; } } else { ackData.errCode = TcpMsg.Error.NotFoundDeckInfo; } if (ackData.errCode != TcpMsg.Error.None) { logger.Warn($"UID={UID} Error Code={ackData.errCode.ToString()}"); } stateType = UserStateType.None; Send(new Packet(ackData)); }
public void Clear() { if (null != card) { uuid = 0; nickName = string.Empty; card = null; comment = string.Empty; sale_price = 0; } }
public void IntlMsg_TransactionHash(InternalMsg.InternalBaseMsg msg) { var intlMsg = msg as InternalMsg.IntlMsg_TransactionHash; var resDataHeader = JsonConvert.DeserializeObject <LBD.ResponesDataHeader>(intlMsg.result); if (resDataHeader.statusCode == 1000) { if (null == user) { return; } var code = LBD.LBDApiManager.TxHashToCode(intlMsg.result); if (code == 0) { var logs = LBD.LBDApiManager.TxHashToLogs(intlMsg.result); // Used for nontFungible Mint and Transfer. Use both single and multi. // If future Mint and Transfer are included in one log, you have to think again. var nontFungible_tokenInfos = new List <LBD.TokenInfo>(); // Currently, only one type of eventType is used. // If you use eventType because it is mixed, you have to think again. var eventType = string.Empty; var fromAddr = string.Empty; var toAddr = string.Empty; foreach (var log in logs) { foreach (var evnt in log.events) { eventType = evnt.type; switch (evnt.type) { case "mint_ft": { var tokenInfos = new List <LBD.TokenInfo>(); foreach (var attr in evnt.attributes) { if (attr.key == "to") { logger.Info($"{attr.key} {attr.key}={attr.value}"); } else if (attr.key == "amount") { var value = attr.value.Split(':'); var tokenInfo = LBD.LBDApiManager.Instance.TokenIdToTokenInfo(true, value[1], Convert.ToInt32(value[0])); tokenInfos.Add(tokenInfo); } } user.SetFungibleTokenMint(tokenInfos); if (user.stateType == UserStateType.NewUserConnect) { tokenInfos.ForEach(x => { user.Currency_SetPrice(x.tokenType, x.amount); }); user.OperatorServiceTokenMint(1000); } else if (user.stateType == UserStateType.BuyFungible) { var currency = tokenInfos.ToDictionary(x => x.tokenType, x => (Int64)x.amount); user.OnMintBuyShopSlot(currency); } } break; case "mint_nft": { foreach (var attr in evnt.attributes) { if (attr.key == "to") { toAddr = attr.value; logger.Info($"{attr.key} {attr.key}={attr.value}"); } else if (attr.key == "name") { logger.Info($"{attr.key} {attr.key}={attr.value}"); } else if (attr.key == "token_id") { var tokenInfo = LBD.LBDApiManager.Instance.TokenIdToTokenInfo(false, attr.value, 1); nontFungible_tokenInfos.Add(tokenInfo); } } } break; case "burn_ft": case "burn_ft_from": { var tokenInfos = new List <LBD.TokenInfo>(); foreach (var attr in evnt.attributes) { if (attr.key == "from") { logger.Info($"{attr.key} {attr.key}={attr.value}"); } else if (attr.key == "amount") { var value = attr.value.Split(':'); var tokenInfo = LBD.LBDApiManager.Instance.TokenIdToTokenInfo(true, value[1], Convert.ToInt32(value[0])); tokenInfos.Add(tokenInfo); } } //user.TokenBurn(ackData.fungible, tokenInfos); } break; case "burn_nft": case "burn_nft_from": { var tokenInfos = new List <LBD.TokenInfo>(); foreach (var attr in evnt.attributes) { if (attr.key == "from") { logger.Info($"{attr.key} {attr.key}={attr.value}"); } else if (attr.key == "token_id") { var tokenInfo = LBD.LBDApiManager.Instance.TokenIdToTokenInfo(false, attr.value, 1); tokenInfos.Add(tokenInfo); } } //user.TokenBurn(ackData.fungible, tokenInfos); } break; case "transfer_ft": case "transfer_ft_from": { var tokenInfos = new List <LBD.TokenInfo>(); foreach (var attr in evnt.attributes) { if (attr.key == "from") { fromAddr = attr.value; logger.Info($"{attr.key} {attr.key}={attr.value}"); } else if (attr.key == "to") { toAddr = attr.value; logger.Info($"{attr.key} {attr.key}={attr.value}"); } else if (attr.key == "amount") { var value = attr.value.Split(':'); var tokenInfo = LBD.LBDApiManager.Instance.TokenIdToTokenInfo(true, value[1], Convert.ToInt32(value[0])); tokenInfos.Add(tokenInfo); } } FungibleTransferUserStateProcess(fromAddr, toAddr, tokenInfos); } break; case "transfer_nft": case "transfer_nft_from": { foreach (var attr in evnt.attributes) { if (attr.key == "from") { fromAddr = attr.value; logger.Info($"{attr.key} {attr.key}={attr.value}"); } else if (attr.key == "to") { toAddr = attr.value; logger.Info($"{attr.key} {attr.key}={attr.value}"); } else if (attr.key == "token_id") { var tokenInfo = LBD.LBDApiManager.Instance.TokenIdToTokenInfo(false, attr.value, 1); nontFungible_tokenInfos.Add(tokenInfo); } } //user.TokenTransfer(false, tokenInfos); } break; case "attach": case "attach_from": { LBD.TokenInfo ptokenInfo = null; LBD.TokenInfo ctokenInfo = null; foreach (var attr in evnt.attributes) { if (attr.key == "from") { logger.Info($"{attr.key} {attr.key}={attr.value}"); } else if (attr.key == "to_token_id") { ptokenInfo = LBD.LBDApiManager.Instance.TokenIdToTokenInfo(false, attr.value, 1); } else if (attr.key == "token_id") { ctokenInfo = LBD.LBDApiManager.Instance.TokenIdToTokenInfo(false, attr.value, 1); } } user.AddComposableTokenInfo(ptokenInfo, ctokenInfo); } break; case "detach": case "detach_from": { LBD.TokenInfo ptokenInfo = null; LBD.TokenInfo ctokenInfo = null; foreach (var attr in evnt.attributes) { if (attr.key == "from") { logger.Info($"{attr.key} {attr.key}={attr.value}"); } else if (attr.key == "from_token_id") { ptokenInfo = LBD.LBDApiManager.Instance.TokenIdToTokenInfo(false, attr.value, 1); } else if (attr.key == "token_id") { ctokenInfo = LBD.LBDApiManager.Instance.TokenIdToTokenInfo(false, attr.value, 1); } } user.RemoveComposableTokenInfo(ptokenInfo, ctokenInfo); } break; case "mint": case "mint_from": { var contractId = string.Empty; Int32 amount = 0; foreach (var attr in evnt.attributes) { if (attr.key == "contract_id") { contractId = attr.value; } else if (attr.key == "amount") { amount = Convert.ToInt32(attr.value); } else if (attr.key == "from") { logger.Info($"{attr.key} {attr.key}={attr.value}"); } else if (attr.key == "to") { logger.Info($"{attr.key} {attr.key}={attr.value}"); } } //user.SetServiceTokenMint(contractId, amount); } break; case "transfer": case "transfer_from": { var from = string.Empty; var to = string.Empty; var contractId = string.Empty; Int32 amount = 0; foreach (var attr in evnt.attributes) { if (attr.key == "from") { from = attr.value; logger.Info($"{attr.key} {attr.key}={attr.value}"); } else if (attr.key == "to") { to = attr.value; logger.Info($"{attr.key} {attr.key}={attr.value}"); } else if (attr.key == "contract_id") { contractId = attr.value; } else if (attr.key == "amount") { amount = Convert.ToInt32(attr.value); } } if (from == Setting.ProgramSetting.Instance.lbdInfo.operatorAddr) { user.ServiceTokenTransfer(contractId, amount); } else if (from == user.walletAddr) { user.ServiceTokenTransfer(contractId, -amount); } var tokenInfos = new List <LBD.TokenInfo> { new LBD.TokenInfo() { tokenType = contractId, amount = amount, } }; if (user.stateType == UserStateType.NewUserConnect) { user.stateType = UserStateType.CreateNickName; var ackData = new TcpMsg.AckVerifyAccessToken(); ackData.authType = TcpMsg.AuthType.CreateNickname; user.Send(new Packet(ackData)); logger.Debug($"UserUID={user.UID} UserStateType={user.stateType.ToString()}"); } else if (user.stateType == UserStateType.BuyFungible) { var currency = tokenInfos.ToDictionary(x => x.tokenType, x => (Int64)x.amount); user.OnMintBuyShopSlot(currency); } else if (user.stateType == UserStateType.BuyShopSlot) { user.OnBurnShopSlot(tokenInfos); } else if (user.stateType == UserStateType.RefreshShopCardSlot) { user.OnBurnRefreshShopCardSlot(tokenInfos); } } break; case "approve_collection": { var contractId = string.Empty; foreach (var attr in evnt.attributes) { if (attr.key == "proxy") { logger.Info($"{attr.key} {attr.key}={attr.value}"); } else if (attr.key == "approver") { logger.Info($"{attr.key} {attr.key}={attr.value}"); } else if (attr.key == "contract_id") { contractId = attr.value; } } LBD.LBDApiManager.Instance.AddLBDCmd(new LBD.Msg.LBDMsg_GetProxy() { uid = user.UID, guid = user.Id.ToString(), lineuserid = user.lineUID }); } break; } } } MultNonFungibleUserStateProcess(eventType, fromAddr, toAddr, nontFungible_tokenInfos); } else { logger.Warn($"TransactionHash fail Code={code}"); } } }