private async Task HandleChatMessagesAsync(IEnumerable <MessageVm> messages) { foreach (var message in messages) { if (NodeData.Instance.RoutedMessagesId.Contains(message.GlobalId.GetValueOrDefault())) { continue; } if (message.Attachments != null) { foreach (var attachment in message.Attachments) { attachment.MessageId = 0; } await attachmentsService.DownloadAttachmentsPayloadAsync(message.Attachments, current).ConfigureAwait(false); await attachmentsService.ThrowIfAttachmentsInvalidAsync(message, true).ConfigureAwait(false); } MessageDto sentMessage; try { sentMessage = await createMessagesService.CreateChatMessageAsync(MessageConverter.GetMessageDto(message), message.SenderId.GetValueOrDefault()).ConfigureAwait(false); } catch (ConversationNotFoundException ex) { ChatVm chat = await nodeRequestSender.GetFullChatInformationAsync(ex.ConversationId, current).ConfigureAwait(false); await crossNodeService.NewOrEditChatAsync(chat).ConfigureAwait(false); sentMessage = await createMessagesService.CreateChatMessageAsync(MessageConverter.GetMessageDto(message), message.SenderId.GetValueOrDefault()).ConfigureAwait(false); } catch (UserIsNotInConversationException ex) { List <ChatUserVm> chatUsers = await nodeRequestSender.GetChatUsersInformationAsync( new List <long> { ex.UserId.GetValueOrDefault() }, ex.ChatId.GetValueOrDefault(), current).ConfigureAwait(false); await crossNodeService.AddChatUsersAsync(chatUsers).ConfigureAwait(false); sentMessage = await createMessagesService.CreateChatMessageAsync(MessageConverter.GetMessageDto(message), message.SenderId.GetValueOrDefault()).ConfigureAwait(false); } SendNotificationsAsync(sentMessage); NodeData.Instance.RoutedMessagesId.Add(message.GlobalId.GetValueOrDefault()); } }
public async Task CreateChatMessage() { var chat = fillTestDbHelper.Chats.FirstOrDefault(); var expectedMessage = new MessageDto { ConversationId = chat.Id, ConversationType = ConversationType.Channel, GlobalId = Guid.NewGuid(), Text = "Create channel message test", SendingTime = DateTime.UtcNow.ToUnixTime(), SenderId = chat.ChatUsers.FirstOrDefault().UserId }; var actualMessage = await createMessagesService.CreateChatMessageAsync(expectedMessage, expectedMessage.SenderId.Value); Assert.True(expectedMessage.Text == actualMessage.Text && expectedMessage.SenderId == actualMessage.SenderId && expectedMessage.ConversationId == actualMessage.ConversationId && expectedMessage.ConversationType == actualMessage.ConversationType && expectedMessage.GlobalId == actualMessage.GlobalId); }
private async Task <IEnumerable <MessageVm> > SendChatMessagesAsync(IEnumerable <MessageVm> messages) { List <MessageVm> resultMessages = new List <MessageVm>(); foreach (var message in messages) { message.SendingTime = DateTime.UtcNow.ToUnixTime(); message.SenderId = userId; message.GlobalId = RandomExtensions.NextGuid(); await attachmentsService.ThrowIfAttachmentsInvalidAsync(message, false).ConfigureAwait(false); MessageDto savedMessage = await createMessagesService.CreateChatMessageAsync(MessageConverter.GetMessageDto(message), userId).ConfigureAwait(false); MessageVm savedMessageVm = MessageConverter.GetMessageVm(savedMessage, current.UserId); resultMessages.Add(savedMessageVm); conversationsNoticeService.SendNewMessageNoticeToChatUsersAsync(savedMessage, current); message.Attachments = savedMessageVm.Attachments; nodeNoticeService.SendNewChatMessageNodeNoticeAsync(message); UsersConversationsCacheService.Instance.NewMessageUpdateUserChatsAsync(message); } return(resultMessages); }