private async Task HandleChannelMessagesAsync(IEnumerable <MessageVm> messages) { foreach (var message in messages) { bool hasException = true; MessageDto sentMessage = null; while (hasException) { try { if (NodeData.Instance.RoutedMessagesId.Contains(message.GlobalId.GetValueOrDefault())) { hasException = false; 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); } sentMessage = await createMessagesService.CreateChannelMessageAsync(MessageConverter.GetMessageDto(message)).ConfigureAwait(false); hasException = false; } catch (ConversationNotFoundException ex) { var channel = await nodeRequestSender.GetChannelInformationAsync(ex.ConversationId, current).ConfigureAwait(false); await createChannelsService.CreateOrUpdateUserChannelsAsync(new List <ChannelDto> { channel }).ConfigureAwait(false); hasException = true; } catch (UserNotFoundException ex) { List <UserVm> users = new List <UserVm>(await nodeRequestSender.GetUsersInfoAsync(ex.UsersId.ToList(), null, current).ConfigureAwait(false)); await crossNodeService.CreateNewUsersAsync(users).ConfigureAwait(false); hasException = true; } catch (Exception ex) { Logger.WriteLog(ex); hasException = false; } } SendChannelNotificationsAsync(sentMessage); } }
public async Task CreateChannelMessage() { var channel = fillTestDbHelper.Channels.FirstOrDefault(); var expectedMessage = new MessageDto { ConversationId = channel.ChannelId, ConversationType = ConversationType.Channel, GlobalId = Guid.NewGuid(), Text = "Create channel message test", SendingTime = DateTime.UtcNow.ToUnixTime(), SenderId = channel.ChannelUsers.FirstOrDefault(user => user.ChannelUserRole >= ChannelUserRole.Administrator).UserId }; var actualMessage = await createMessagesService.CreateChannelMessageAsync(expectedMessage); 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> > SendChannelMessagesAsync(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 newMessage = await createMessagesService.CreateChannelMessageAsync(MessageConverter.GetMessageDto(message)).ConfigureAwait(false); MessageVm savedMessageVm = MessageConverter.GetMessageVm(newMessage, current.UserId); resultMessages.Add(savedMessageVm); conversationsNoticeService.SendNewMessageNoticeToChannelUsersAsync(newMessage, current); message.Attachments = savedMessageVm.Attachments; nodeNoticeService.SendNewChannelMessageNodeNoticeAsync(message); UsersConversationsCacheService.Instance.NewMessageUpdateUsersChannelsAsync(savedMessageVm); } return(resultMessages); }