Beispiel #1
0
        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());
        }
Beispiel #2
0
        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"));
        }