public async Task <IActionResult> AddDuel( [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = "addDuel/{userName}/{arenaName}")] HttpRequest req, string userName, string arenaName, ILogger log) { log.LogInformation($"C# HTTP trigger function processed a request."); string requestBody = await new StreamReader(req.Body).ReadToEndAsync(); var completedDuel = JsonConvert.DeserializeObject <ArenaDuel>(requestBody); if (string.IsNullOrEmpty(userName)) { return(new BadRequestErrorMessageResult("Parameter UserName is required")); } if (!await context.UserAppData.AnyAsync(x => x.Name == userName)) { return(new BadRequestErrorMessageResult("User does not exist in database")); } var currentUser = await context.UserAppData.FirstOrDefaultAsync(x => x.Name == userName); completedDuel.UserAppDataID = currentUser.ID; var userWon = completedDuel.WonDuel; var userId = userName; var output = userWon ? $"{userId} Defeated {completedDuel.RivalId} in challenge {completedDuel.ChallengeName}!" : $"{completedDuel?.RivalId} Defeated {userId} in challenge {completedDuel?.ChallengeName}!"; var arenaResult = new ArenaResultMessage { DuelWinner = completedDuel.WonDuel ? userName : completedDuel.RivalId, DuelLoser = completedDuel.WonDuel ? completedDuel.RivalId : userName }; var client = new HttpClient(); var url = $"{FunctionBaseUrl}/alerts/DataBase Function"; var resultUrl = $"{FunctionBaseUrl}/duelResult/{arenaName}/{output}"; log.LogInformation($"Result posted to Hub: \r\n url: {resultUrl} \r\n arenaResult: {JObject.FromObject(arenaResult)}"); var message = $"{output}"; await client.PostAsJsonAsync(url, message); await client.PostAsJsonAsync(resultUrl, arenaResult); await context.UserDuels.AddAsync(completedDuel); await context.SaveChangesAsync(); return(new OkResult()); }
protected override async Task OnInitializedAsync() { UserName = AppState.UserName; if (string.IsNullOrEmpty(UserName)) { var auth = await AuthenticationState.GetAuthenticationStateAsync(); UserName = auth?.User?.Identity?.Name; } //Temp for testing //var random = new Random(); //UserName = $"{userName}{random.Next(1, 999)}"; hubConnection = new HubConnectionBuilder() .WithUrl($"{FunctionBaseUrl}/", options => { options.Headers.Add("x-ms-client-principal-id", UserName); }) .Build(); hubConnection.On <object>("getAlert", (message) => { var encodedMsg = $"{message}"; Console.WriteLine($"received message: {encodedMsg}"); Toaster.Add(message.ToString(), MatToastType.Primary); messages.Add(message.ToString()); StateHasChanged(); }); hubConnection.On <object>("alertArena", async(message) => { var encodedMsg = $"{message}"; Console.WriteLine($"received Alert: {encodedMsg}"); var activeArenas = await PublicClient.GetActiveArenas(); ArenaService.UpdateArenas(activeArenas); StateHasChanged(); }); hubConnection.On <object>("leaveArena", (message) => { var encodedMsg = $"{message}"; Console.WriteLine($"received message: {encodedMsg}"); messages.Add(encodedMsg); OnNewMessage.InvokeAsync(encodedMsg); }); hubConnection.On <object>("resultAlert", (message) => { Console.WriteLine($"'resultAlert' Triggered message: {message}"); var result = ArenaResultMessage.FromJson(message.ToString()); var arenaName = result.Group; ArenaService.ArenaComplete(arenaName); Console.WriteLine($"'ArenaComplete' values:name: {arenaName} winner {result.DuelWinner} loser: {result.DuelLoser}"); Toaster.Add(result.Message, MatToastType.Primary); messages.Add(result.Message); }); hubConnection.On <object>("resultActual", (arenaObj) => { Console.WriteLine("'resultActual' Triggered"); var encodedMsg = $"{arenaObj}"; var arenaAlert = ArenaResultMessage.FromJson(arenaObj.ToString()); messages.Add($"{arenaAlert.DuelWinner} defeated {arenaAlert.DuelLoser} in arena {arenaAlert.Group}"); Console.WriteLine($"received group message: {encodedMsg}"); StateHasChanged(); }); hubConnection.On <object>("joinAlert", (message) => { var encodedMsg = $"{message}"; var jObj = JObject.Parse(message.ToString()); var arenaName = jObj["group"]?.ToString(); var userJoin = jObj["user"]?.ToString(); var arenaText = jObj["message"]?.ToString(); Console.WriteLine($"'joinAlert' Triggered: {encodedMsg}"); ArenaService.JoinArena(arenaName, userJoin); Toaster.Add(arenaText, MatToastType.Primary); StateHasChanged(); }); hubConnection.On <object>("showArena", group => { Console.WriteLine($"Create arena message received: {group}"); var jObj = JObject.Parse(group.ToString()); var user = jObj["user"]?.ToString(); var groupobj = jObj["group"]?.ToString(); var chalObj = jObj["challenge"]?.ToString(); Toaster.Add($"User {user} joined Arena: {groupobj} with Challenge: {chalObj}", MatToastType.Info); messages.Add($"User {user} joined Arena: {groupobj} with Challenge: {chalObj}"); StateHasChanged(); }); await hubConnection.StartAsync(); var arenasInit = await PublicClient.GetActiveArenas(); ArenaService.UpdateArenas(arenasInit); }