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() });
}
}