public async void SendNewMessageNoticeToChatUsersAsync(MessageDto newMessage, ClientConnection connection, bool sendPush = true) { try { List <ChatUserVm> chatUsers = await loadChatsService.GetChatUsersAsync(newMessage.ConversationId, null).ConfigureAwait(false); if (sendPush) { pushNotificationsService.SendMessageNotificationAsync( newMessage, chatUsers.Select(opt => new NotificationUser(opt.UserId, opt.IsMuted.Value)).ToList()); } List <Task> noticeTasks = new List <Task>(); foreach (var chatUser in chatUsers) { var clientConnections = connectionsService.GetUserClientConnections(chatUser.UserId); if (clientConnections != null) { noticeTasks.Add(Task.Run(async() => { NewMessageNotice notice = new NewMessageNotice( MessageConverter.GetMessageVm(newMessage, chatUser.UserId), MarkdownHelper.ContainsMarkdownUserCalling(newMessage.Text, chatUser.UserId)); await SendNoticeToClientsAsync(clientConnections.Where(clientConnection => clientConnection != connection), notice).ConfigureAwait(false); })); } } await Task.WhenAll(noticeTasks).ConfigureAwait(false); } catch (Exception ex) { Logger.WriteLog(ex); } }
public async void SendNewMessageNoticeToChannelUsersAsync(MessageDto newMessage, ClientConnection clientConnection = null, bool sendPush = true) { try { var channelUsers = await loadChannelsService.GetChannelUsersAsync(newMessage.ConversationId, null, null).ConfigureAwait(false); if (sendPush) { pushNotificationsService.SendMessageNotificationAsync( newMessage, channelUsers.Select(opt => new NotificationUser(opt.UserId, opt.IsMuted.Value)).ToList()); } var administrationUsers = await loadChannelsService.GetAdministrationChannelUsersAsync(newMessage.ConversationId).ConfigureAwait(false); foreach (var channelUser in channelUsers) { var clientConnections = connectionsService.GetUserClientConnections(channelUser.UserId); if (clientConnections != null) { clientConnections = clientConnections.Where(opt => opt != clientConnection).ToList(); NewMessageNotice notice; if (channelUser.UserId == newMessage.SenderId || administrationUsers.Any(opt => opt.UserId == channelUser.UserId)) { notice = new NewMessageNotice( MessageConverter.GetMessageVm(newMessage, channelUser.UserId), MarkdownHelper.ContainsMarkdownUserCalling(newMessage.Text, channelUser.UserId)); } else { MessageVm tempMessage = new MessageVm(MessageConverter.GetMessageVm(newMessage, channelUser.UserId)) { SenderId = null }; notice = new NewMessageNotice( tempMessage, MarkdownHelper.ContainsMarkdownUserCalling(tempMessage.Text, channelUser.UserId)); } await SendNoticeToClientsAsync(clientConnections, notice).ConfigureAwait(false); } } } catch (Exception ex) { Logger.WriteLog(ex); } }
public async void SendSystemMessageNoticeAsync(MessageDto message) { switch (message.ConversationType) { case ConversationType.Dialog: { var mirrorDialog = await loadDialogsService.GetDialogAsync(message.ConversationId).ConfigureAwait(false); var secondMessage = (MessageDto)message.Clone(); secondMessage.ConversationId = mirrorDialog.Id; var firstUserConnections = connectionsService.GetUserClientConnections(mirrorDialog.FirstUserId); var secondUserConnections = connectionsService.GetUserClientConnections(mirrorDialog.SecondUserId); var firstUserNotice = new NewMessageNotice(MessageConverter.GetMessageVm(secondMessage, null), false); var secondUserNotice = new NewMessageNotice(MessageConverter.GetMessageVm(message, null), false); await SendNoticeToClientsAsync(firstUserConnections, firstUserNotice).ConfigureAwait(false); await SendNoticeToClientsAsync(secondUserConnections, secondUserNotice).ConfigureAwait(false); } break; case ConversationType.Chat: { var usersIds = await loadChatsService.GetChatUsersIdAsync(message.ConversationId).ConfigureAwait(false); var notice = new NewMessageNotice(MessageConverter.GetMessageVm(message, null), false); var clientsConnections = connectionsService.GetClientConnections(usersIds); await SendNoticeToClientsAsync(clientsConnections, notice).ConfigureAwait(false); } break; case ConversationType.Channel: { var usersIds = await loadChannelsService.GetChannelUsersIdAsync(message.ConversationId).ConfigureAwait(false); var notice = new NewMessageNotice(MessageConverter.GetMessageVm(message, null), false); var clientsConnections = connectionsService.GetClientConnections(usersIds); await SendNoticeToClientsAsync(clientsConnections, notice).ConfigureAwait(false); } break; } }
public async void SendNewMessageNoticeToDialogUsers(IEnumerable <MessageDto> messages, ClientConnection senderClientConnection, long receiverId, bool saveMessageFlag = true) { try { long senderId = messages.FirstOrDefault().SenderId.GetValueOrDefault(); var dialogs = await loadDialogsService.GetUsersDialogsAsync(senderId, receiverId); var currentDialog = dialogs.FirstOrDefault(dial => dial.FirstUserId == receiverId); Notice senderNotice = default; if (senderId != receiverId) { var message = messages.FirstOrDefault(mess => mess.ConversationId != currentDialog.Id); senderNotice = new NewMessageNotice( MessageConverter.GetMessageVm(message, senderId), MarkdownHelper.ContainsMarkdownUserCalling(message.Text, receiverId)); } else { var message = messages.FirstOrDefault(); senderNotice = new NewMessageNotice( MessageConverter.GetMessageVm(message, senderId), MarkdownHelper.ContainsMarkdownUserCalling(message.Text, receiverId)); } var senderClients = connectionsService.GetUserClientConnections(messages.ElementAt(0).SenderId.GetValueOrDefault()); if (senderClients != null) { IEnumerable <ClientConnection> senderConnectionsExceptCurrent = senderClients.Where(connection => !Equals(senderClientConnection, connection)); await SendNoticeToClientsAsync(senderConnectionsExceptCurrent, senderNotice).ConfigureAwait(false); } if (messages.Count() == 2) { var message = messages.FirstOrDefault(mess => mess.ConversationId == currentDialog.Id); var receiverClients = connectionsService.GetUserClientConnections(receiverId); Notice receiverNotice = new NewMessageNotice( MessageConverter.GetMessageVm(message, receiverId), MarkdownHelper.ContainsMarkdownUserCalling(message.Text, receiverId)); if (receiverClients != null && receiverClients.Any()) { await SendNoticeToClientsAsync(receiverClients, receiverNotice).ConfigureAwait(false); } else { var receiver = await loadUsersService.GetUserAsync(receiverId).ConfigureAwait(false); if (receiver.NodeId == NodeSettings.Configs.Node.Id && !saveMessageFlag) { await pendingMessagesService.AddUserPendingMessageAsync(receiverId, receiverNotice, message.GlobalId).ConfigureAwait(false); } } } DialogDto dialog = await loadDialogsService.GetDialogAsync(currentDialog.Id).ConfigureAwait(false); pushNotificationsService.SendMessageNotificationAsync( messages.FirstOrDefault(opt => opt.ConversationId == currentDialog.Id), new List <NotificationUser> { new NotificationUser(dialog.FirstUserId, dialog.IsMuted) }); } catch (Exception ex) { Logger.WriteLog(ex); } }