Esempio n. 1
0
        public void UdpateCardInstanceDefinitionsAsync()
        {
            if (UpdateCardInstanceDefinitionsBGW.IsBusy)
            {
                throw new Exception("Can't call to UpdateCardInstanceDefinitionsBGW until the previous execution finishes");
            }
            var argument = new UpdateCardInstanceDefinitionsArgument(ApiManagerInstance, InMemoryManagerInstance);

            UpdateCardInstanceDefinitionsBGW.RunWorkerAsync(argument);
        }
Esempio n. 2
0
        private static void UpdateCardInstanceDefinitions_DoWork(object sender, DoWorkEventArgs e)
        {
            BackgroundWorker worker = (BackgroundWorker)sender;
            UpdateCardInstanceDefinitionsArgument managers = (UpdateCardInstanceDefinitionsArgument)e.Argument;

            worker.ReportProgress(0);

            var getCardsFromCollectionPageCall = new ApiCallList.Collections.GetCollectionPage
            {
                nbPerPage   = 52, // Maximum allowed by the API
                ItemsFilter = new List <string>()
                {
                    "id", "id_player_character", "level", "xp"
                },
                ContextFilter = new List <string>()
                {
                    "totalPages"
                }
            };

            var request = new ApiRequest();

            request.EnqueueApiCall(getCardsFromCollectionPageCall);

            int page       = 0;
            int totalPages = 1;
            // First valid page = 0. Last valid page = totalPages - 1
            bool firstIteration = true;
            var  instances      = new List <CardInstance>();

            while (page < totalPages)
            {
                if (worker.CancellationPending == true)
                {
                    e.Cancel = true;
                    return;
                }

                getCardsFromCollectionPageCall.page = page;

                string         response;
                HttpStatusCode statusCode = managers.ApiManager.SendRequest(request, out response);
                if (statusCode != HttpStatusCode.OK)
                {
                    throw new Exception("GetCardInstancesFromSummary returned: " + statusCode.ToString());
                }
                dynamic decoded = JsonDecoder.Decode(response);

                if (firstIteration)
                {
                    dynamic context = decoded[getCardsFromCollectionPageCall.Call]["context"];
                    totalPages = int.Parse(context["totalPages"].ToString());
                    getCardsFromCollectionPageCall.ContextFilter.Remove("totalPages");
                    firstIteration = false;
                }
                worker.ReportProgress(100 * page / totalPages); // totalPages can't be zero, a player can't sell cards on their current deck

                dynamic items = decoded[getCardsFromCollectionPageCall.Call]["items"];
                foreach (dynamic item in items)
                {
                    int cardBaseId     = int.Parse(item["id"].ToString());
                    int cardInstanceId = int.Parse(item["id_player_character"].ToString());
                    int level          = int.Parse(item["level"].ToString());
                    int experience     = int.Parse(item["xp"].ToString());

                    instances.Add(new CardInstance(managers.InMemoryManager.GetCardBase(cardBaseId), cardInstanceId, level, experience));
                }

                page++;
            }

            managers.InMemoryManager.ReloadToMemoryCardInstances(instances);

            worker.ReportProgress(100);
        }