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); }
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); }
private void OnItemChangingResponce(AppChangingItemsAnswerMessage message) { if (_waitingItemChangingCallback != null) { _waitingItemChangingCallback.SafeRaise(message.Response); _waitingItemChangingCallback = null; } }
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); }
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); }
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); } }
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); }