示例#1
0
        public void ReqVerifyAccessToken(NetMessage message)
        {
            var reqData = message.GetData <TcpMsg.ReqVerifyAccessToken>();

            if (null != user)
            {
                if (!string.IsNullOrEmpty(reqData.accessToken))
                {
                    user.SetAccessToken(reqData.accessToken);
                    LDC.LDCApiManager.Instance.AddLDCCmd(new LDC.Msg.LDCMsg_VerifyAccessToken()
                    {
                        guid        = user.Id.ToString(),
                        accessToken = reqData.accessToken
                    });
                }
                else
                {
                    var ackData = new TcpMsg.AckVerifyAccessToken();
                    ackData.errCode  = TcpMsg.Error.AccessToken_NullOrEmpty;
                    ackData.authType = TcpMsg.AuthType.AuthFail;

                    user.Send(new Packet(ackData));
                    logger.Warn($"GUID={user.Id.ToString()} Error Code={ackData.errCode.ToString()}");
                }
            }
            else
            {
                logger.Warn($"Is User Null~~~");
            }
        }
        public void IntlMsg_GetUser(InternalMsg.InternalBaseMsg msg)
        {
            var intlMsg       = msg as InternalMsg.IntlMsg_GetUser;
            var resDataHeader = JsonConvert.DeserializeObject <LBD.ResponesDataHeader>(intlMsg.result);

            if (resDataHeader.statusCode == 1000)
            {
                var resData = JsonConvert.DeserializeObject <LBD.Respones_GetUserInfio>(intlMsg.result);

                if (null != user)
                {
                    if (!string.IsNullOrEmpty(resData.responseData.walletAddress))
                    {
                        user.walletAddr = resData.responseData.walletAddress;

                        LBD.LBDApiManager.Instance.AddLBDCmd(new LBD.Msg.LBDMsg_GetProxy()
                        {
                            uid        = user.UID,
                            guid       = user.Id.ToString(),
                            lineuserid = user.lineUID
                        });
                    }
                    else
                    {
                        // Is not LBW member
                        TcpMsg.MessageResponse ackData;
                        if (user.stateType == UserStateType.CreateNickName)
                        {
                            ackData = new TcpMsg.AckCreateNickName()
                            {
                                errCode = TcpMsg.Error.IsNot_LBW_Member
                            };
                        }
                        else if (user.stateType == UserStateType.ExistingUserConnect)
                        {
                            ackData = new TcpMsg.AckVerifyAccessToken()
                            {
                                errCode  = TcpMsg.Error.IsNot_LBW_Member,
                                authType = TcpMsg.AuthType.IsNot_LBW_Member
                            };
                        }
                        else
                        {
                            logger.Warn($"User is not an LBW member User StateError StateType={user.stateType.ToString()}");
                            return;
                        }
                        logger.Warn($"User is not an LBW member StateType={user.stateType.ToString()}");
                        user.Send(new Packet(ackData));
                    }
                }
                else
                {
                    logger.Warn($"Is User Null~~~");
                }
            }
            else
            {
                logger.Warn($"Error statusCode={resDataHeader.statusCode} statusMessage={resDataHeader.statusMessage}");
            }
        }
        public void IntlMsg_GetProxy(InternalMsg.InternalBaseMsg msg)
        {
            var intlMsg = msg as InternalMsg.IntlMsg_GetProxy;

            var resDataHeader = JsonConvert.DeserializeObject <LBD.ResponesDataHeader>(intlMsg.result);

            if (resDataHeader.statusCode == 1000)
            {
                var resData = JsonConvert.DeserializeObject <LBD.Respones_GetProxyInfo>(intlMsg.result);

                if (null != user)
                {
                    if (resData.responseData.isApproved)
                    {
                        TcpMsg.MessageResponse ackData;
                        if (user.stateType == UserStateType.CreateNickName)
                        {
                            ackData = new TcpMsg.AckCreateNickName();
                        }
                        else if (user.stateType == UserStateType.ExistingUserConnect)
                        {
                            ackData = new TcpMsg.AckVerifyAccessToken()
                            {
                                authType = TcpMsg.AuthType.AuthSucess
                            };
                        }
                        else
                        {
                            logger.Warn($"User is not Proxy Approved User StateError StateType={user.stateType.ToString()}");
                            return;
                        }
                        user.Send(new Packet(ackData));
                    }
                    else
                    {
                        logger.Debug($"User is not Proxy Approved RequestProxy UID={user.UID}");

                        LBD.LBDApiManager.Instance.AddLBDCmd(new LBD.Msg.LBDMsg_RequestProxy()
                        {
                            uid        = user.UID,
                            guid       = user.Id.ToString(),
                            fromUserId = user.lineUID,
                            landingUri = string.Empty
                        });

                        var ackData = new TcpMsg.AckRequestProxy();
                        user.Send(new Packet(ackData));
                    }
                }
                else
                {
                    logger.Warn($"Is User Null~~~");
                }
            }
            else
            {
                logger.Warn($"Error statusCode={resDataHeader.statusCode} statusMessage={resDataHeader.statusMessage}");
            }
        }
        public void IntlMsg_VerifyAccessToken(InternalMsg.InternalBaseMsg msg)
        {
            var intlMsg = msg as InternalMsg.IntlMsg_VerifyAccessToken;

            if (null != user)
            {
                var ackData = new TcpMsg.AckVerifyAccessToken();
                if (intlMsg.result)
                {
                    var accessToken = user.GetAccessToken();
                    if (!string.IsNullOrEmpty(accessToken))
                    {
                        var ldcMsg = new LDC.Msg.LDCMsg_GetProfile()
                        {
                            guid        = user.Id.ToString(),
                            accessToken = accessToken
                        };

                        LDC.LDCApiManager.Instance.AddLDCCmd(ldcMsg);
                        return;
                    }
                    else
                    {
                        ackData.errCode = TcpMsg.Error.AccessToken_NullOrEmpty;
                    }
                }
                else
                {
                    ackData.errCode = TcpMsg.Error.AccessToken_CheckError;
                }

                ackData.authType = TcpMsg.AuthType.AuthFail;

                user.Send(new Packet(ackData));
                logger.Warn($"GUID={user.Id.ToString()} Error Code={ackData.errCode.ToString()}");
            }
            else
            {
                logger.Warn($"Is User Null~~~");
            }
        }
        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}");
                }
            }
        }
        public void Login(InternalMsg.IntlMsg_GetProfile profile)
        {
            logger.Debug($"Profile UserId={profile.userId} displayName={profile.displayName}");

            displayName   = profile.displayName;
            pictureUrl    = profile.pictureUrl;
            statusMessage = profile.statusMessage;

            if (stateType == UserStateType.None)
            {
                var repoUser = TCGGameSrv.IocContainer.Resolve <Repository.IUser>();

                tblUser = repoUser.GetUserFromLineUserId(profile.userId);
                var IsCreate = false;
                if (null == tblUser)
                {
                    Table.TblUser newUser = new Table.TblUser()
                    {
                        lineuserid = profile.userId,
                        nickname   = string.Empty,
                        address    = string.Empty,
                        regDate    = DateTime.Now
                    };

                    newUser.uuid = repoUser.Insert(newUser);
                    tblUser      = newUser;
                    IsCreate     = true;
                }

                if (IsCreate)
                {
                    stateType = UserStateType.NewUserConnect;

                    LBD.LBDApiManager.Instance.AddLBDCmd(new LBD.Msg.LBDMsg_MultiMintNonFungible()
                    {
                        uid      = UID,
                        guid     = Id.ToString(),
                        toAddr   = string.Empty,
                        toUserId = lineUID,
                        mints    = DefaultCardToTokenTypeInfo()
                    });

                    IsCreate = false;
                    logger.Debug($"UserUID={UID} UserStateType={stateType.ToString()}");
                }
                else
                {
                    if (string.IsNullOrEmpty(tblUser.nickname))
                    {
                        stateType = UserStateType.CreateNickName;

                        var ackData = new TcpMsg.AckVerifyAccessToken();
                        ackData.authType = TcpMsg.AuthType.CreateNickname;

                        Send(new Packet(ackData));
                    }
                    else
                    {
                        stateType = UserStateType.ExistingUserConnect;
                        GetWalletAddress();
                    }
                }

                logger.Debug($"UserUID={UID} UserStateType={stateType.ToString()}");
            }
        }