public Conversation GetById_(Guid conversationId, Guid current)
        {
            using (IUnitOfWork unitOfWork = unitOfWorkFactory.Create())
            {
                Database.Entities.Conversation dbConversation = unitOfWork.ConversationRepository.GetByID(conversationId);



                Guid otherUserId = current == dbConversation.FromID ? dbConversation.PetOwnerId : dbConversation.FromID;

                Database.Entities.UserDetails otherUser = unitOfWork.UserDetailsRepository.GetByID(otherUserId);
                Database.Entities.Pet         pet       = unitOfWork.PetRepository.GetByID(dbConversation.PetID);

                Conversation conversation = new Conversation()
                {
                    WithID         = dbConversation.FromID,
                    WithImagineUrl = otherUser.ImagineUrl, //sender.Image,
                    ID             = dbConversation.ID,
                    PetID          = dbConversation.PetID,
                    PetImagineUrl  = pet.ImageUrl,
                    YourId         = dbConversation.PetOwnerId,
                    YourImagineUrl = dbConversation.PetOwnerImagineUrl,
                    Active         = dbConversation.Status
                };

                return(conversation);
            }
        }
Exemple #2
0
        public ActionResult GetConversation(Guid ownerId, Guid petId)
        {
            Guid currentUser = new Guid(User.Identity.GetUserId());

            Database.Entities.Conversation conversation = conversationService.GetConversationBeetwen(currentUser, petId);

            Database.Entities.Message[] messages = messageService.GetMesagesForConversation2(conversation.ID);

            ViewBag.ConversationId = conversation.ID;

            return(View(messages));
        }
 public Database.Entities.Conversation GetConversationBeetwen(Guid userId, Guid petId)
 {
     using (IUnitOfWork unitOfWork = unitOfWorkFactory.Create())
     {
         if (!unitOfWork.ConversationRepository.ExistsBetween(userId, petId))
         {
             Database.Entities.Pet          pet            = unitOfWork.PetRepository.GetByID(petId);
             UserDetails                    petOwner       = unitOfWork.UserDetailsRepository.GetByID(pet.OwnerID);
             UserDetails                    user           = unitOfWork.UserDetailsRepository.GetByID(userId);
             Database.Entities.Conversation dbConversation = new Database.Entities.Conversation()
             {
                 ID = Guid.NewGuid(), PetID = petId, PetOwnerId = pet.OwnerID, PetImagineUrl = pet.ImageUrl, FromID = userId
             };
             unitOfWork.ConversationRepository.Create(dbConversation);
             unitOfWork.Save();
             return(dbConversation);
         }
         return(unitOfWork.ConversationRepository.GetConversationBetween(userId, petId));
     }
 }
Exemple #4
0
        public Conversation(int id, Listener server, Client owner)
        {
            Id            = id;
            Owner         = owner;
            Server        = server;
            _participants = new List <Client>
            {
                owner
            };
            _callRequests = new List <CallRequest>();

            using (var database = new RozmawiatorDb())
            {
                var ownerUser = database.Users.FirstOrDefault(u => u.UserName == owner.Nickname);
                if (ownerUser == null)
                {
                    return;
                }

                var conversation = new Database.Entities.Conversation
                {
                    Type    = ConversationType.Active,
                    Owner   = ownerUser,
                    Creator = ownerUser,
                    ConversationParticipants = new[]
                    {
                        new ConversationParticipant
                        {
                            User = ownerUser
                        }
                    }
                };
                _conversationId = conversation.Id;
                database.Conversations.Add(conversation);
                database.SaveChanges();
            }
        }
Exemple #5
0
        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);
        }