public async Task <IActionResult> SendPrivateMessage([FromBody] SendPrivateMessageModel sendPrivateMessageModel) { var currentUserId = GetUserId(); var privateMessage = await _messageService.AddPrivateMessage( currentUserId, sendPrivateMessageModel.ReceiverId, sendPrivateMessageModel.Sended, sendPrivateMessageModel.Content); var todoSender = CreateMessageSendingTasks( _onlineUsers.GetChatHubConnections(currentUserId), ChatMessageViewModel.ForMessageSender(privateMessage), _hubContext); var todoReceiver = CreateMessageSendingTasks( _onlineUsers.GetChatHubConnections(privateMessage.ReceiverId), ChatMessageViewModel.ForMessageReceiver(privateMessage), _hubContext); await Task.WhenAll(todoSender.Concat(todoReceiver)); return(Ok()); }
public async Task <IActionResult> LogOut() { var id = Guid.Parse(HttpContext.User.Claims.Single(x => x.Type == "UserId").Value); await HttpContext.SignOutAsync(); var chatConnetcions = _onlineUsers.GetChatHubConnections(id); var todo = chatConnetcions.Select(x => Task.Run(async() => { await _hubContext.Clients.Client(x).SendAsync("Disconnect"); return(true); })); await Task.WhenAll(todo); _onlineUsers.RemoveOnlineUser(id); return(RedirectToAction("Index", "Chat")); }