public async Task <ActionResult> ClearHeros([HttpTrigger(AuthorizationLevel.Anonymous, "post")] HttpRequest req, CancellationToken cancellationToken) { var database = cosmosClient.GetDatabase("Heros"); var container = database.GetContainer("Heros"); var iterator = container.GetItemLinqQueryable <Hero>(requestOptions: new QueryRequestOptions() { MaxItemCount = Max_Page_Size }).ToFeedIterator(); var hub = await StaticServiceHubContextStore.Get().GetAsync(nameof(HerosHub)); while (iterator.HasMoreResults) { var resultSet = await iterator.ReadNextAsync(cancellationToken); var deletions = new List <Hero>(); foreach (var item in resultSet) { deletions.Add(item); await container.DeleteItemAsync <Hero>(item.Id, new Microsoft.Azure.Cosmos.PartitionKey(item.Race), cancellationToken : cancellationToken); await Task.Delay(150); } await hub.Clients.All.SendAsync("herosStream", new ChangeSet <Hero, string>(deletions.Select(z => new Change <Hero, string>(ChangeReason.Remove, z.Id, z))), cancellationToken); } return(new OkResult()); }
public async Task <ActionResult <IEnumerable <Hero> > > ImportHeros([HttpTrigger(AuthorizationLevel.Anonymous, "post")] HttpRequest req, CancellationToken cancellationToken) { var container = cosmosClient.GetDatabase("Heros").GetContainer("Heros"); var ids = req.Query["id"].SelectMany(z => z.Split(',')); var heros = await GetHeros(cancellationToken); var client = httpClientFactory.CreateClient("SuperHeroApi"); var records = new List <Hero>(); foreach (var id in ids) { Hero parent = null; if (heros.Count > 0) { parent = faker.PickRandom(heros).OrNull(faker, 0.1f); } records.Add(await GenerateHero(container, client, id, parent?.Id, cancellationToken)); } var hub = await StaticServiceHubContextStore.Get().GetAsync(nameof(HerosHub)); await hub.Clients.All.SendAsync( "herosStream", new ChangeSet <Hero, string>( records.Select(hero => new Change <Hero, string>(ChangeReason.Add, hero.Id, hero)) ), cancellationToken ); return(new OkObjectResult(records)); }
public async Task <ActionResult <IEnumerable <Hero> > > RandomHeros([HttpTrigger(AuthorizationLevel.Anonymous, "post")] HttpRequest req, CancellationToken cancellationToken) { var container = cosmosClient.GetDatabase("Heros").GetContainer("Heros"); var count = req.Query["count"]; var client = httpClientFactory.CreateClient("SuperHeroApi"); var records = new List <Hero>(); var heros = await GetHeros(cancellationToken); foreach (var id in Enumerable.Range(0, int.Parse(count)).Select(_ => faker.Random.Number(1, 731))) { Hero parent = null; if (heros.Count > 0) { parent = faker.PickRandom(heros).OrNull(faker, 0.1f); } records.Add(await GenerateHero(container, client, id.ToString(), parent?.Id, cancellationToken)); } var hub = await StaticServiceHubContextStore.Get().GetAsync(nameof(HerosHub)); foreach (var items in records.Buffer(Max_Page_Size)) { await hub.Clients.All.SendAsync( "herosStream", new ChangeSet <Hero, string>(items.Select(hero => new Change <Hero, string>(ChangeReason.Add, hero.Id, hero))), cancellationToken ); await Task.Delay(400); // simulate a delay for effect! } return(new OkObjectResult(records)); }
public async Task <IActionResult> UpdateHero([HttpTrigger(AuthorizationLevel.Anonymous, "post")] Hero hero, CancellationToken cancellationToken) { var container = cosmosClient.GetDatabase("Heros").GetContainer("Heros"); hero.Updated = DateTimeOffset.Now.ToString("u"); var originalHero = (await container.GetItemLinqQueryable <Hero>(requestOptions: new QueryRequestOptions() { MaxItemCount = Max_Page_Size }) .Where(z => z.Id == hero.Id) .ToFeedIterator() .ReadNextAsync(cancellationToken))?.SingleOrDefault(); var result = await container.UpsertItemAsync(hero, cancellationToken : cancellationToken); var hub = await StaticServiceHubContextStore.Get().GetAsync(nameof(HerosHub)); await hub.Clients.All.SendAsync( "herosStream", new ChangeSet <Hero, string>() { new Change <Hero, string>(ChangeReason.Update, result.Resource.Id, result.Resource, originalHero) }, cancellationToken ); return(new OkObjectResult(result.Resource)); }
public static async Task Broadcast( [HttpTrigger(AuthorizationLevel.Anonymous, "post")] HttpRequest req, [SignalR(HubName = "simplechat")] IAsyncCollector <SignalRMessage> signalRMessages) { var message = new JsonSerializer().Deserialize <ChatMessage>(new JsonTextReader(new StreamReader(req.Body))); var serviceHubContext = await StaticServiceHubContextStore.Get().GetAsync("simplechat"); await serviceHubContext.Clients.All.SendAsync("newMessage", message); }
public async Task <IActionResult> DeleteHero( [HttpTrigger(AuthorizationLevel.Anonymous, "delete")] HttpRequest req, CancellationToken cancellationToken) { var container = cosmosClient.GetDatabase("Heros").GetContainer("Heros"); var id = req.Query["id"].ToString(); var partition = req.Query["partition"].ToString(); await container.DeleteItemAsync <Hero>(id, new Microsoft.Azure.Cosmos.PartitionKey(null), cancellationToken : cancellationToken); var hub = await StaticServiceHubContextStore.Get().GetAsync(nameof(HerosHub)); await hub.Clients.All.SendAsync("herosStream", new ChangeSet <Hero, string>() { new Change <Hero, string>(ChangeReason.Remove, id, null) }, cancellationToken); return(new OkResult()); }
public async Task <IActionResult> CreateHero([HttpTrigger(AuthorizationLevel.Anonymous, "post")] Hero hero, CancellationToken cancellationToken) { var container = cosmosClient.GetDatabase("Heros").GetContainer("Heros"); hero.Id = Guid.NewGuid().ToString(); hero.Created = DateTimeOffset.Now.ToString("u"); var result = await container.CreateItemAsync(hero, cancellationToken : cancellationToken); var hub = await StaticServiceHubContextStore.Get().GetAsync(nameof(HerosHub)); await hub.Clients.All.SendAsync( "herosStream", new ChangeSet <Hero, string>() { new Change <Hero, string>(ChangeReason.Add, result.Resource.Id, result.Resource) }, cancellationToken ); return(new OkObjectResult(result.Resource)); }