Esempio n. 1
0
        public async Task <ActionResult <Message> > SendGroupMessage(string roomId, [FromBody] MessageSentForm sentMessage)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(new { message = "Message form is not valid" }));
            }

            var room = await roomRepository.GetRoom(roomId);

            if (room == null)
            {
                return(NotFound(new { message = "Couldn't find the room in the database" }));
            }

            await hubContext.Clients.Group(room.RoomName).SendAsync(KeyConstants.receiveNewRoomMessage, sentMessage, roomId);

            var updatedRoom = await roomRepository.AddMessageToRoom(roomId, sentMessage);

            var newMessage = updatedRoom.RoomMessages.Find(m => m.Content == sentMessage.Content && m.SenderName == sentMessage.SenderName);

            if (newMessage == null)
            {
                return(NotFound(new { message = "Couldn't find the new room message in the database" }));
            }

            return(CreatedAtRoute("GetRoomMessage", new { roomId = updatedRoom.Id.ToString(), roomMessageId = newMessage.Id.ToString() }, newMessage));
        }
Esempio n. 2
0
        public async Task <Message> AddPublicMessage(MessageSentForm sentMessage)
        {
            Message message = new Message {
                Id         = ObjectId.GenerateNewId().ToString(),
                SenderId   = sentMessage.SenderId,
                SenderName = sentMessage.SenderName,
                Content    = sentMessage.Content,
                SentDate   = DateTime.Now
            };

            await publicMessages.InsertOneAsync(message);

            return(message);
        }
Esempio n. 3
0
        public async Task <ActionResult <Message> > SendPublicMessage([FromBody] MessageSentForm newMessage)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(new { message = "Message form is not valid" }));
            }

            var messageToDb = await publicRepository.AddPublicMessage(newMessage);

            if (messageToDb == null)
            {
                return(NotFound(new { message = "Public message was not added to the database" }));
            }

            await hubContext.Clients.All.SendAsync(KeyConstants.receiveNewPublicMessage, newMessage);

            return(CreatedAtRoute("GetMessage", new { id = messageToDb.Id.ToString() }, messageToDb));
        }
Esempio n. 4
0
        public async Task <Room> AddMessageToRoom(string roomId, MessageSentForm sentMessage)
        {
            Message message = new Message {
                Id         = ObjectId.GenerateNewId().ToString(),
                SenderId   = sentMessage.SenderId,
                SenderName = sentMessage.SenderName,
                Content    = sentMessage.Content,
                SentDate   = DateTime.Now
            };

            var filter = Builders <Room> .Filter.Eq(r => r.Id, roomId);

            var update = Builders <Room> .Update.Push(r => r.RoomMessages, message);

            return(await rooms.FindOneAndUpdateAsync <Room>(filter, update, new FindOneAndUpdateOptions <Room> {
                ReturnDocument = ReturnDocument.After
            }));
        }
Esempio n. 5
0
        public async Task <User> AddPrivateMessageToContact(string senderId, string receiverId, MessageSentForm sentMessage)
        {
            Message message = new Message {
                Id         = ObjectId.GenerateNewId().ToString(),
                SenderId   = sentMessage.SenderId,
                SenderName = sentMessage.SenderName,
                Content    = sentMessage.Content,
                SentDate   = DateTime.Now
            };

            var filter = Builders <User> .Filter.Eq(u => u.Id, senderId)
                         & Builders <User> .Filter.ElemMatch(x => x.Contacts, Builders <Contact> .Filter.Eq(c => c.ContactId, receiverId));

            var update = Builders <User> .Update.Push(u => u.Contacts[-1].Messages, message);

            return(await users.FindOneAndUpdateAsync <User>(filter, update, new FindOneAndUpdateOptions <User> {
                ReturnDocument = ReturnDocument.After
            }));
        }
Esempio n. 6
0
        public async Task <ActionResult <Message> > SendPrivateMessage(string receiverId, [FromBody] MessageSentForm sentMessage)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(new { message = "Message form is not valid" }));
            }

            var contactValid = await accountRepository.GetUser(receiverId);

            if (contactValid == null)
            {
                return(BadRequest(new { message = "Cannot find the contact in the database" }));
            }
            var senderDocument = await accountRepository.GetUser(sentMessage.SenderId);

            if (senderDocument == null)
            {
                return(BadRequest(new { message = "Cannot find the user in the database" }));
            }

            var senderConnection = await userConnectedRepository.GetConnectedUserByUserId(sentMessage.SenderId);

            if (senderConnection == null)
            {
                return(BadRequest(new { message = "Verify your connection to the SignalR Hub" }));
            }
            var senderConnectionId = senderConnection.ConnectionId;

            var updatedSender = await userRepository.AddPrivateMessageToContact(sentMessage.SenderId, receiverId, sentMessage);

            if (updatedSender == null)
            {
                return(NotFound(new { message = "Private message was not added to the database" }));
            }

            var newSenderPrivateMessage = updatedSender.Contacts.Find(c => c.ContactId == receiverId).Messages.Find(m => m.SenderName == sentMessage.SenderName && m.Content == sentMessage.Content);

            if (newSenderPrivateMessage == null)
            {
                return(NotFound(new { message = "Couldn't find the new private message in the database" }));
            }

            var updatedReceiver = await userRepository.AddPrivateMessageToContact(receiverId, sentMessage.SenderId, sentMessage);

            if (updatedReceiver == null)
            {
                return(NotFound(new { message = "Private message was not added to the database" }));
            }

            var newReceiverPrivateMessage = updatedReceiver.Contacts.Find(c => c.ContactId == sentMessage.SenderId).Messages.Find(m => m.SenderName == sentMessage.SenderName && m.Content == sentMessage.Content);

            if (newReceiverPrivateMessage == null)
            {
                return(NotFound(new { message = "Couldn't find the new private message in the database" }));
            }

            var receiverConnection = await userConnectedRepository.GetConnectedUserByUserId(receiverId);

            if (receiverConnection == null)
            {
                await hubContext.Clients.Client(senderConnectionId).SendAsync(KeyConstants.addedPrivateMessageOffline, newSenderPrivateMessage, receiverId);

                return(CreatedAtRoute("GetContactMessage", new { userId = sentMessage.SenderId.ToString(), contactId = receiverId, messageId = newSenderPrivateMessage.Id }, newSenderPrivateMessage));
            }
            var receiverConnectionId = receiverConnection.ConnectionId;

            await hubContext.Clients.Client(senderConnectionId).SendAsync(KeyConstants.receiveNewPrivateMessage, newSenderPrivateMessage, receiverId);

            await hubContext.Clients.Client(receiverConnectionId).SendAsync(KeyConstants.receiveNewPrivateMessage, newReceiverPrivateMessage, sentMessage.SenderId);

            return(CreatedAtRoute("GetContactMessage", new { userId = sentMessage.SenderId.ToString(), contactId = receiverId, messageId = newSenderPrivateMessage.Id }, newSenderPrivateMessage));
        }