public async Task SendMessage()

in wvd-templates/diagnostics-sample/src/MSFT.WVD.Diagnostics/Controllers/DiagonizeIssuesController.cs [281:408]


        public async Task<IActionResult> SendMessage(DiagnoseDetailPageViewModel data)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    var viewData = new SendMessageQuery();
                    var messageStatus = new List<MessageStatus>();
                    tenantGroupName = HttpContext.Session.Get<string>("SelectedTenantGroupName");
                    tenant = HttpContext.Session.Get<string>("SelectedTenantName");
                    var refreshtoken = await HttpContext.GetTokenAsync("refresh_token").ConfigureAwait(false);
                    accessToken = _commonService.GetAccessTokenWVD(refreshtoken); //await HttpContext.GetTokenAsync("access_token");

                    if (string.IsNullOrEmpty(data.Message) && string.IsNullOrEmpty(data.Title))
                    {

                        ViewBag.TitleErrorMsg = "Subject is required";
                        ViewBag.MessageErrorMsg = "Message is required";
                    }
                    else if (string.IsNullOrEmpty(data.Title))
                    {
                        ViewBag.TitleErrorMsg = "Title is required";

                    }
                    else if (string.IsNullOrEmpty(data.Message))
                    {
                        ViewBag.MessageErrorMsg = "Message is required";
                    }

                    else
                    {
                        if (data.UserSessions.Where(x => x.IsSelected == true).ToList().Count > 0)
                        {
                            foreach (var item in data.UserSessions.Where(x => x.IsSelected == true).ToList())
                            {
                                var sendMessageQuery = new SendMessageQuery()
                                {
                                    tenantGroupName = tenantGroupName,
                                    tenantName = item.tenantName,
                                    hostPoolName = item.hostPoolName,
                                    sessionHostName = item.sessionHostName,
                                    sessionId = item.sessionId,
                                    messageTitle = HttpUtility.UrlEncode(data.Title),
                                    messageBody = HttpUtility.UrlEncode(data.Message),
                                    userPrincipalName = item.userPrincipalName,
                                    adUserName = item.adUserName

                                };
                                var Content = new StringContent(JsonConvert.SerializeObject(sendMessageQuery), Encoding.UTF8, "application/json");
                                _logger.LogInformation($"Call service to send message to {item.userPrincipalName}");
                                var response = await _userSessionService.SendMessage(accessToken, sendMessageQuery).ConfigureAwait(false);
                                if (response == HttpStatusCode.OK.ToString())
                                {
                                    messageStatus.Add(new MessageStatus()
                                    {
                                        Message = $"Message sent successfully to {item.adUserName}",
                                        Status = "Success"
                                    });

                                }
                                else if (response == HttpStatusCode.Forbidden.ToString() || response == HttpStatusCode.Unauthorized.ToString())
                                {
                                    messageStatus.Add(new MessageStatus()
                                    {
                                        Message = $"Failed to send message to {item.adUserName} . You don't have permissions to send message.",
                                        Status = "Error"
                                    });
                                }
                                else
                                {
                                    messageStatus.Add(new MessageStatus()
                                    {
                                        Message = $"Failed to send message to {item.adUserName}",
                                        Status = "Error"
                                    });

                                }
                            }
                            ViewBag.ErrorMsg = "";

                        }
                        else
                        {

                            ViewBag.ErrorMsg = "Please select at least one user";
                        }
                    }
                    return View("ActivityHostDetails", new DiagnoseDetailPageViewModel()
                    {
                        selectedUsername = data.UserSessions.Where(x => x.IsSelected == true).ToList(),
                        UserSessions = data.UserSessions.Where(usr => usr.IsSelected = true)
                       .Select(usr => { usr.IsSelected = false; return usr; })
                       .ToList(),
                        Title = data.Title,
                        Message = data.Message,
                        SendMsgStatuses = messageStatus,
                        ConnectionActivity = data.ConnectionActivity,
                        ShowConnectedUser = true,
                        ShowMessageForm = true,
                        VMPerformance = await GetVMPerformance(data.ConnectionActivity.SessionHostName).ConfigureAwait(false)
                    });

                }
                else
                {

                    return View("ActivityHostDetails", new DiagnoseDetailPageViewModel()
                    {
                        selectedUsername = data.UserSessions.Where(x => x.IsSelected == true).ToList(),
                        UserSessions = data.UserSessions.Where(usr => usr.IsSelected = true)
                        .Select(usr => { usr.IsSelected = false; return usr; })
                        .ToList(),
                        ConnectionActivity = data.ConnectionActivity,
                        ShowConnectedUser = true,
                        ShowMessageForm = true,
                        Title = data.Title,
                        Message = data.Message,
                        VMPerformance = await GetVMPerformance(data.ConnectionActivity.SessionHostName).ConfigureAwait(false)
                    });
                }
            }
            catch (Exception ex)
            {
                _logger.LogError($"Error Occured : {ex.Message.ToString()}");
                return RedirectToAction("Error", "Home", new ErrorDetails() { StatusCode = (int)HttpStatusCode.BadRequest, Message = ex.Message.ToString() });
            }

        }