Exemplo n.º 1
0
        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());
        }
Exemplo n.º 2
0
        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);
        }