Exemple #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);
        }
Exemple #2
0
        public async Task SendNewMessageEvent(string userId, string chatId, NewMessageSource source)
        {
            if (_chats.Chats.ContainsKey(chatId) && _chats.Chats[chatId].Users.ContainsKey(userId))
            {
                _chats.Chats[chatId].Users[userId].SetNotTyping();

                var now = DateTime.Now.ToUnixTimestamp();
                await SendEventAsync(chatId, "Typing",
                                     new ChatTypingEventSource()
                {
                    Typing = _chats.Chats[chatId].Users.Values
                             .Where(x => x.LastType + _typingTime > now)
                             .Select(x => x.UserId).ToArray()
                });
            }
            await SendEventAsync(chatId, "newMessage", source);
        }
Exemple #3
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);
        }