Beispiel #1
0
        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);
        }
Beispiel #3
0
        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);
        }