Exemplo n.º 1
0
        public async Task <Response> CreateResponseAsync()
        {
            if (!await conversationsService.IsUserInConversationAsync(request.ConversationType, request.ConversationId, clientConnection.UserId.Value))
            {
                return(new ResultResponse(request.RequestId, "The user is not in conversation.", ErrorCode.PermissionDenied));
            }
            var nodesIds = await conversationsService.GetConversationNodesIdsAsync(request.ConversationType, request.ConversationId).ConfigureAwait(false);

            if (nodesIds.Count > 1)
            {
                long?dialogUserId = null;
                if (request.ConversationType == ConversationType.Dialog)
                {
                    var users = await loadDialogsService.GetDialogUsersAsync(request.ConversationId).ConfigureAwait(false);

                    dialogUserId = users.FirstOrDefault(user => user.Id != clientConnection.UserId).Id;
                }
                nodeNoticeService.SendConverationActionNodeNoticeAsync(clientConnection.UserId.Value, dialogUserId, request.ConversationId, request.ConversationType, request.Action, nodesIds);
            }
            if (request.Action != ConversationAction.Screenshot)
            {
                conversationsNoticeService.SendConversationActionNoticeAsync(clientConnection.UserId.Value, request.ConversationType, request.ConversationId, request.Action);
            }
            if (request.ConversationType != ConversationType.Channel && request.Action == ConversationAction.Screenshot)
            {
                var systemMessageInfo = SystemMessageInfoFactory.CreateScreenshotMessageInfo(clientConnection.UserId.Value);
                var message           = await systemMessagesService.CreateMessageAsync(request.ConversationType, request.ConversationId, systemMessageInfo).ConfigureAwait(false);

                conversationsNoticeService.SendSystemMessageNoticeAsync(message);
            }
            return(new ResultResponse(request.RequestId));
        }
Exemplo n.º 2
0
        public async Task GetConversationsNodesIds()
        {
            var chat         = fillTestDbHelper.Chats.FirstOrDefault();
            var chatNodesIds = await conversationsService.GetConversationNodesIdsAsync(ConversationType.Chat, chat.Id);

            Assert.Equal(chat.NodesId, chatNodesIds);
        }
Exemplo n.º 3
0
        public async Task HandleAsync()
        {
            try
            {
                List <long> nodesIds = await conversationsService.GetConversationNodesIdsAsync(request.ConversationType, request.ConversationId).ConfigureAwait(false);

                if (!nodesIds.Contains(current.Node.Id))
                {
                    NodeWebSocketCommunicationManager.SendResponse(new ResultNodeResponse(request.RequestId, ErrorCode.PermissionDenied, "No rights to load messages."), current);
                    return;
                }
                List <MessageDto> messages = await loadMessagesService.GetMessagesAsync(
                    request.ConversationId,
                    request.ConversationType,
                    request.Direction.GetValueOrDefault(true),
                    request.MessageId,
                    request.AttachmentsTypes,
                    request.Length).ConfigureAwait(false);

                MessagesNodeResponse response = new MessagesNodeResponse(request.RequestId, messages);
                NodeWebSocketCommunicationManager.SendResponse(response, current);
            }
            catch (Exception ex)
            {
                Logger.WriteLog(ex);
                NodeWebSocketCommunicationManager.SendResponse(new ResultNodeResponse(request.RequestId, ErrorCode.UnknownError), current);
            }
        }
Exemplo n.º 4
0
        public async Task <MessageDto> CreateMessageAsync(ConversationType conversationType, long conversationId, SystemMessageInfo systemMessageInfo)
        {
            List <long> nodesIds = await conversationsService.GetConversationNodesIdsAsync(conversationType, conversationId).ConfigureAwait(false);

            using (MessengerDbContext context = contextFactory.Create())
            {
                var           messageInfoJson = systemMessageInfo.ToJson();
                AttachmentDto attachmentDto   = new AttachmentDto
                {
                    Type    = AttachmentType.SystemMessage,
                    Payload = messageInfoJson,
                    Hash    = GetHash(messageInfoJson)
                };
                MessageDto messageDto = new MessageDto
                {
                    ConversationId   = conversationId,
                    ConversationType = conversationType,
                    Attachments      = new List <AttachmentDto>
                    {
                        attachmentDto
                    },
                    SendingTime = DateTime.UtcNow.ToUnixTime(),
                    GlobalId    = Guid.NewGuid(),
                    NodesIds    = nodesIds
                };
                Message message = MessageConverter.GetMessage(messageDto);
                if (conversationType == ConversationType.Dialog)
                {
                    var mirrorMessage  = (MessageDto)messageDto.Clone();
                    var mirrodDialogId = await loadDialogsService.GetMirrorDialogIdAsync(conversationId);

                    mirrorMessage.ConversationId = mirrodDialogId;
                    await context.Messages.AddAsync(MessageConverter.GetMessage(mirrorMessage));
                }
                await context.Messages.AddAsync(message).ConfigureAwait(false);

                await context.SaveChangesAsync().ConfigureAwait(false);

                return(MessageConverter.GetMessageDto(message));
            }
        }