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); }
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); }
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); }