private bool IsCanMakeDMarketOperation(AppChangingItemsMessage message)
        {
            if (string.IsNullOrEmpty(Model.GetPlayerMarketAccessToken(message.ConnectionId)))
            {
                var response = new ItemsChangingResponse(ErrorCode.EmptyDMarketAccessToken);
                var answer   = new AppChangingItemsAnswerMessage(response)
                {
                    Error = NetworkMessageErrorType.DMarketError
                };
                SendMessageToClient(answer, message.ConnectionId);
                return(false);
            }

            if (message.ActionType == ItemActionType.ToMarket)
            {
                for (var i = 0; i < message.ItemsCount; i++)
                {
                    var worldId = message.GetWorldId(i);
                    var item    = GetInventory(message.ConnectionId).GetItem(worldId);
                    if (item == null)
                    {
                        var error = new Error
                        {
                            ErrorCode    = ErrorCode.AssetNotFound,
                            ErrorMessage = string.Format("Cannot find item with id {0} for player {1}. Need reload game",
                                                         worldId, Model.GetUserNameByConnectionId(message.ConnectionId))
                        };
                        OnItemOperationError(message, error);
                        return(false);
                    }
                }
            }
            return(true);
        }
Example #2
0
        private void OnItemBuyMsg(AppChangingItemsMessage message)
        {
            PlayerInfo     playerInfo = GetPlayer(message.ConnectionId);
            PlayerItemInfo itemInfo   = playerInfo.Inventory.GetItem(message.WorldId);
            GameItemType   itemType   = itemInfo.ItemType;;

            int price = GetPrice(itemType);

            ItemsChangingResponse response;

            if (playerInfo.Inventory.Coins >= price)
            {
                PlayerItemInfo newItemInfo = new PlayerItemInfo(itemType, Storage.GetUniqueWorldId());
                playerInfo.Inventory.AddItem(newItemInfo);
                playerInfo.Inventory.Coins -= price;

                Storage.Change(playerInfo);

                response = new ItemsChangingResponse(true);
            }
            else
            {
                response = new ItemsChangingResponse(false, "Not enough coins");
            }

            AppChangingItemsAnswerMessage answer = new AppChangingItemsAnswerMessage();

            SendAnswer(answer, message);
        }
        private void OnItemBuyMsg(AppChangingItemsMessage message)
        {
            PlayerInfo playerInfo = GetPlayer(message.ConnectionId);
            var        response   = new ItemsChangingResponse();

            for (var i = 0; i < message.ItemsCount; i++)
            {
                var            worldId  = message.GetWorldId(i);
                PlayerItemInfo itemInfo = playerInfo.Inventory.GetItem(worldId);
                GameItemType   itemType = itemInfo.ItemType;
                int            price    = GetPrice(itemType);

                if (playerInfo.Inventory.Coins >= price)
                {
                    PlayerItemInfo newItemInfo = new PlayerItemInfo(itemType, Storage.GetUniqueWorldId());
                    playerInfo.Inventory.AddItem(newItemInfo);
                    playerInfo.Inventory.Coins -= price;
                }
                else
                {
                    response.ErrorText = "Not enough coins";
                    break;
                }
            }
            Storage.Change(playerInfo);
            AppChangingItemsAnswerMessage answer = new AppChangingItemsAnswerMessage(response);

            SendMessageToClient(answer, message.ConnectionId);
        }
        private bool IsCanMakeDMarketOperation(AppMessageBase message)
        {
            var answer = new AppChangingItemsAnswerMessage();

            if (String.IsNullOrEmpty(Model.MarketToken))
            {
                answer.Error = NetMsgErrorType.DMarketError;
                answer.Response.ErrorText = "Market token is empty";
                SendAnswer(answer, message);
                return(false);
            }
            var itemOperationMsg = message as AppChangingItemsMessage;

            if (itemOperationMsg != null)
            {
                var playerInfo = GetPlayer(message.ConnectionId);
                if (playerInfo == null)
                {
                    var error = new Error();
                    error.ErrorMessage = string.Format("Cannot find player {0}. " +
                                                       "Need reload game", Model.ConIdToUserName[message.ConnectionId]);
                    error.ErrorCode = ErrorCode.AssetNotFound;
                    OnItemOperationError(itemOperationMsg, error);
                    return(false);
                }
            }
            return(true);
        }
Example #5
0
 private void OnItemChangingResponce(AppChangingItemsAnswerMessage message)
 {
     if (_waitingItemChangingCallback != null)
     {
         _waitingItemChangingCallback.SafeRaise(message.Response);
         _waitingItemChangingCallback = null;
     }
 }
Example #6
0
        private void CheckTransactionsStatuses()
        {
            if (_pendingTransactions.Count > 0)
            {
                for (int i = 0; i < _pendingTransactions.Count; i++)
                {
                    var    transaction             = _pendingTransactions[i];
                    int    transactionConnectionId = transaction.Sender.ConnectionId;
                    string playerMarketAccessToken = Model.GetPlayerMarketAccessToken(transactionConnectionId);

                    DMarketApi.CheckAsyncOperation(playerMarketAccessToken, transaction.OperationIds,
                                                   (response, request) =>
                    {
                        var answerMessage = new AppChangingItemsAnswerMessage(new ItemsChangingResponse());

                        foreach (var transactionItem in response.Items)
                        {
                            var status = _apiResponseAdapter.GetTransactionStatusType(transactionItem.status);
                            switch (status)
                            {
                            case DMarketTransactionStatusType.Fail:
                                {
                                    answerMessage.Response.MarketError = (ErrorCode)transactionItem.transferError.code;
                                    transaction.RemoveOperation(transactionItem.operationId);
                                    break;
                                }

                            case DMarketTransactionStatusType.Success:
                                {
                                    OnSuccessMarketOperation(transactionItem, transaction);
                                    transaction.RemoveOperation(transactionItem.operationId);
                                    break;
                                }
                            }
                        }

                        var transactionLog = string.Format("Transaction for connection: {0}, operation left: {1}", transaction.Sender.ConnectionId,
                                                           transaction.OperationsCount);
                        DevLogger.Log(transactionLog, DTanksLogChannel.GameServer);

                        if (transaction.OperationsCount == 0)
                        {
                            SendMessageToClient(answerMessage, transactionConnectionId);
                            _pendingTransactions.Remove(transaction);
                        }
                        Storage.Change(GetPlayer(transactionConnectionId));
                    },
                                                   error =>
                    {
                        foreach (var transactionInfo in _pendingTransactions)
                        {
                            OnItemOperationError(transactionInfo.Sender, error);
                        }
                        _pendingTransactions.Clear();
                    });
                }
            }
        }
 private void RetryWithRefreshToken(AppChangingItemsMessage message)
 {
     RefreshMarketToken(message.ConnectionId, () => OnItemChangingMsg(message),
                        error =>
     {
         var answer = new AppChangingItemsAnswerMessage(new ItemsChangingResponse(error));
         SendMessageToClient(answer, message.ConnectionId);
     });
 }
 private void RetryWithRefreshToken(AppChangingItemsMessage message)
 {
     RefreshMarketToken(
         () => OnItemChangingMsg(message),
         error =>
     {
         var answer      = new AppChangingItemsAnswerMessage();
         answer.Response = new ItemsChangingResponse(false, error);
         SendAnswer(answer, message);
     });
 }
        private void OnAfterSuccesDMarketOperation(AppChangingItemsMessage message)
        {
            var playerInfo = GetPlayer(message.ConnectionId);

            Storage.Change(playerInfo);

            var answer = new AppChangingItemsAnswerMessage();

            answer.Response = new ItemsChangingResponse(true);
            SendAnswer(answer, message);
            SendDmarketDataUpdateAnswer(message);
        }
Example #10
0
        private void OnItemSellMsg(AppChangingItemsMessage message)
        {
            var playerInfo = GetPlayer(message.ConnectionId);
            var itemType   = playerInfo.Inventory.GetItem(message.WorldId).ItemType;
            var price      = GetPrice(itemType);
            var answer     = new AppChangingItemsAnswerMessage();

            playerInfo.Inventory.Coins += price;
            playerInfo.Inventory.RemoveItem(message.WorldId);
            Storage.Change(playerInfo);
            answer.Response = new ItemsChangingResponse(true);
            SendAnswer(answer, message);
        }
        private void OnItemDevTestAdd(AppChangingItemsMessage message)
        {
            var playerData = GetPlayer(message.ConnectionId);
            var itemType   = message.GetItemType(0);
            var newItem    = new PlayerItemInfo(itemType,
                                                Storage.GetUniqueWorldId());

            playerData.Inventory.Items.Add(newItem);
            Storage.Change(playerData);
            var answer = new AppChangingItemsAnswerMessage(new ItemsChangingResponse());

            SendMessageToClient(answer, message.ConnectionId);
        }
Example #12
0
 private void OnItemChangingResponse(AppChangingItemsAnswerMessage message)
 {
     if (_waitingItemChangingCallback != null)
     {
         _waitingItemChangingCallback.SafeRaise(message.Response);
         _waitingItemChangingCallback = null;
     }
     else if (_waitingMarketCallback.Count > 0)
     {
         _waitingMarketCallback[0].SafeRaise(
             new MarketMoveItemResponse(GetErrorText(message.Response), message.Response.MarketError));
         _waitingMarketCallback.RemoveAt(0);
     }
 }
 private void OnItemOperationError(AppChangingItemsMessage message, Error error)
 {
     if (error.ErrorCode == ErrorCode.DMarketTokenExpired)
     {
         RetryWithRefreshToken(message);
     }
     else
     {
         var answer       = new AppChangingItemsAnswerMessage();
         var errorMessage = GetErrorMessage(error);
         answer.Response = new ItemsChangingResponse(false, errorMessage);
         SendAnswer(answer, message);
     }
 }
Example #14
0
        private void OnItemEquipMsg(AppChangingItemsMessage message)
        {
            PlayerInfo     playerInfo = GetPlayer(message.ConnectionId);
            PlayerItemInfo item       = playerInfo.Inventory.GetItem(message.WorldId);

            playerInfo.Inventory.EquipItem(item);
            Storage.Change(playerInfo);

            var answer = new AppChangingItemsAnswerMessage
            {
                Response = new ItemsChangingResponse(true)
            };

            SendAnswer(answer, message);
        }
        private void OnItemEquipMsg(AppChangingItemsMessage message)
        {
            PlayerInfo playerInfo = GetPlayer(message.ConnectionId);

            for (var i = 0; i < message.ItemsCount; i++)
            {
                var worldId = message.GetWorldId(i);
                var item    = playerInfo.Inventory.GetItem(worldId);
                playerInfo.Inventory.EquipItem(item);
            }
            Storage.Change(playerInfo);
            var answer = new AppChangingItemsAnswerMessage(new ItemsChangingResponse());

            SendMessageToClient(answer, message.ConnectionId);
        }
        private void OnItemSellMsg(AppChangingItemsMessage message)
        {
            var playerInfo = GetPlayer(message.ConnectionId);

            for (var i = 0; i < message.ItemsCount; i++)
            {
                var worldId  = message.GetWorldId(i);
                var itemType = playerInfo.Inventory.GetItem(worldId).ItemType;
                var price    = GetPrice(itemType);
                playerInfo.Inventory.Coins += price;
                playerInfo.Inventory.RemoveItem(worldId);
            }
            Storage.Change(playerInfo);
            var answer = new AppChangingItemsAnswerMessage(new ItemsChangingResponse());

            SendMessageToClient(answer, message.ConnectionId);
        }
        private void SendErrorAnswer(AppChangingItemsMessage message, ErrorCode error)
        {
            var answer = new AppChangingItemsAnswerMessage(new ItemsChangingResponse(error));

            SendMessageToClient(answer, message.ConnectionId);
        }