Пример #1
0
        public async Task SetDeckAsync(string id, [FromBody] DeckDetails details, [FromServices] StateClient state)
        {
            var deck = DeckActorProxy.CreateProxy(id);

            await deck.SetDetailsAsync(details);

            var decks = await state.GetStateAsync <HashSet <string> >("decks");

            decks ??= new HashSet <string>();

            decks.Add(id);

            await state.SaveStateAsync("decks", decks);
        }
Пример #2
0
        public async Task <string> CreateRandomDeckAsync([FromBody] CreateRandomDeckOptions options, [FromServices] StateClient state)
        {
            if (options.UserId == null)
            {
                throw new ArgumentException("UserId should be non-null.", nameof(options));
            }

            string id = Guid.NewGuid().ToString();

            int count = options.Count ?? 10;

            var details = new DeckDetails
            {
                Cards  = new DeckCard[count],
                Name   = options.Name,
                UserId = options.UserId
            };

            // TODO: Choose an appropriate seed.
            var random = new Random();

            using var cardManager = CardManagerProxy.CreateProxy();

            for (int i = 0; i < count; i++)
            {
                // TODO: Card manager should manage generation of IDs.
                int cardValue = random.Next(1, 100 + 1);

                string cardId = await cardManager.CreateCardAsync(
                    new CardDetails
                {
                    UserId = options.UserId,
                    Value  = cardValue
                });

                details.Cards[i] = new DeckCard {
                    CardId = cardId
                };
            }

            await this.SetDeckAsync(id, details, state);

            var user = UserActorProxy.CreateProxy(details.UserId);

            await user.AddDeckAsync(id);

            return(id);
        }
Пример #3
0
 public Task SetDetailsAsync(DeckDetails details)
 {
     return(this.StateManager.SetStateAsync(DetailsStateName, details));
 }