Пример #1
0
        public async Task <MessageDto> SendFirstMessageAsync(JwtSecurityToken token, string userId, string type, IMessageSource message)
        {
            var chat = await _directChatGR.GetDbSet().Where(x => (x.User1Id == token.Subject || x.User2Id == token.Subject) && (x.User1Id == userId || x.User2Id == userId)).FirstOrDefaultAsync();

            if (chat != null || token.Subject == userId)
            {
                throw new ClientException("inc-chatid");
            }
            await _userService.GetAsync(userId);

            chat = await _directChatGR.CreateAsync(new DirectChat
            {
                LastModify = DateTime.Now,
                Messages   = new List <DirectMessage>()
                {
                    new DirectMessage
                    {
                        SenderId     = token.Subject,
                        Type         = type,
                        Date         = DateTime.Now,
                        Base64Source = ObjectToBase64String(message)
                    }
                },
                User1Id = token.Subject,
                User2Id = userId
            });

            var msg = chat.Messages.Last();

            var ntf = new ChatMessageSource
            {
                Date         = msg.Date,
                Sender       = _userService.GetStaticShortDto(token.Subject),
                Type         = msg.Type,
                Base64Source = msg.Base64Source
            };

            await _dataBaseNotificationService.NotifyAsync(chat.User1Id == token.Subject?chat.User2Id : chat.User1Id, "newChatMessage", ntf);

            var msgDto = new NewMessageSource
            {
                Id           = msg.Id,
                Type         = msg.Type,
                Base64Source = msg.Base64Source,
                Date         = msg.Date,
                Sender       = ntf.Sender
            };

            await _chatEventService.SendNewMessageEvent(token.Subject, chat.Id, msgDto);

            return(msgDto);
        }
Пример #2
0
        public MessageDto SendMessage(JwtSecurityToken token, string chatId, string type, IMessageSource message)
        {
            var chat = _directChatGR.GetDbSet().Where(x => x.Id == chatId && (x.User1Id == token.Subject || x.User2Id == token.Subject)).FirstOrDefault();

            if (chat == null)
            {
                throw new ClientException("inc-chatid");
            }

            var msg = _directMessageGR.Create(new DirectMessage
            {
                ChatId       = chatId,
                SenderId     = token.Subject,
                Type         = type,
                Date         = DateTime.Now,
                Base64Source = ObjectToBase64String(message)
            });

            chat.Read = chat.User1Id == token.Subject ? 2 : 1;
            _directChatGR.Update(chat);

            var ntf = new ChatMessageSource
            {
                Id           = msg.Id,
                Type         = msg.Type,
                Base64Source = msg.Base64Source,
                Date         = msg.Date,
                Sender       = _userService.GetShortDto(token.Subject)
            };

            _dataBaseNotificationService.NotifyAsync(chat.User1Id == token.Subject ? chat.User2Id : chat.User1Id, "newChatMessage", ntf);

            var msgDto = new NewMessageSource
            {
                Id           = msg.Id,
                Type         = msg.Type,
                Base64Source = msg.Base64Source,
                Date         = msg.Date,
                Sender       = ntf.Sender
            };

            _chatEventService.SendNewMessageEvent(token.Subject, chatId, msgDto);

            return(msgDto);
        }