private void SaveMessage(Message message) { var sender = _participants.FirstOrDefault(p => p.Id == message.Sender); using (var database = new RozmawiatorDb()) { var senderUser = database.Users.FirstOrDefault(u => u.UserName == sender.Nickname); if (senderUser == null) { return; } var conversation = database.Conversations.First(c => c.Id == _conversationId); var msg = new Database.Entities.Message { Content = message.GetTextContent(), Conversation = conversation, Sender = senderUser, Timestamp = DateTime.Now }; database.Messages.Add(msg); database.SaveChanges(); } }
private void HandleDirectText(Client sender, Message message) { if (sender == null) { return; } var targetNickname = message.GetDirectTextNickname(); var targetClient = GetClient(targetNickname); if (targetClient == null) { Debug($"Undelivered message from {sender.Nickname} to {targetNickname}, target client offline."); return; } using (var database = new RozmawiatorDb()) { var conversation = database.Conversations.FirstOrDefault( c => c.ConversationParticipants.Any(cp => cp.User.UserName == targetNickname)); var senderUser = database.Users.FirstOrDefault(u => u.UserName == sender.Nickname); if (senderUser == null) { SendAsClient(sender, targetClient, message); return; } if (conversation == null) { var targetUser = database.Users.FirstOrDefault(u => u.UserName == targetNickname); if (targetUser == null) { SendAsClient(sender, targetClient, message); return; } conversation = new Database.Entities.Conversation { Type = ConversationType.Passive, ConversationParticipants = new[] { new ConversationParticipant { User = senderUser }, new ConversationParticipant { User = targetUser } } }; database.Conversations.Add(conversation); } var msg = new Database.Entities.Message { Conversation = conversation, Content = message.GetDirectTextContent(), Timestamp = DateTime.Now, Sender = senderUser }; database.Messages.Add(msg); database.SaveChanges(); } var forwardMessage = new Message().DirectText(sender.Nickname, message.GetDirectTextContent()); //SendAsClient(sender, targetClient, message); SendAsClient(sender, targetClient, forwardMessage); }