Пример #1
0
        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));
        }
Пример #2
0
 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}");
                }
            }
        }