Ejemplo n.º 1
0
        public async Task <int> SendMessageToGroup(Message message, int groupId)
        {
            var whoSent = await userService.GetUserById(userProvider.GetUserId(Context));

            await userService.MakeUserOnline(whoSent.Id, Context.ConnectionId);

            try
            {
                if (!await chatsService.ExistsInConversation(groupId, whoSent.Id))
                {
                    await SendError(Context.ConnectionId, "You must join this group to send messages.");

                    return(0);
                }

                if (await bansService.IsBannedFromConversation(groupId, whoSent.Id))
                {
                    await SendError(Context.ConnectionId, "You were banned in this group.");

                    return(0);
                }

                //we can't trust user on what's in user field

                message.User = whoSent.ToAppUserDto();

                MessageDataModel created;

                if (message.Type == MessageType.Attachment)
                {
                    created = await messagesService.AddAttachmentMessage(message, groupId, whoSent.Id);
                }
                else
                {
                    created = await messagesService.AddMessage(message, groupId, whoSent.Id);
                }

                message.TimeReceived = created.TimeReceived.ToUTCString();
                message.Id           = created.MessageID;
                message.State        = MessageState.Delivered;

                await SendMessageToGroupExcept(groupId, Context.ConnectionId, whoSent.Id, message);

                return(created.MessageID);
            }
            catch (Exception ex)
            {
                await SendError(Context.ConnectionId, ex.Message);

                logger.LogError(ex.Message);
                return(0);
            }
        }
        public async Task AddMessagesShouldWork()
        {
            var messagesRepo = new Mock <IRepository <Message> >();
            var messages     = new List <Message>
            {
                new Message(),
                new Message()
            };

            messagesRepo.Setup(r => r.All()).Returns(messages.AsQueryable);
            messagesRepo.Setup(r => r.AddAsync(It.IsAny <Message>())).Returns <Message>(Task.FromResult)
            .Callback <Message>(m => messages.Add(m));

            var service    = new MessagesService(messagesRepo.Object);
            var newMessage = new Message()
            {
                Text = "test"
            };

            await service.AddMessage(newMessage);

            Assert.Equal(3, messages.Count);
            Assert.Contains(messages, m => m.Text == newMessage.Text);
            messagesRepo.Verify(r => r.AddAsync(newMessage), Times.Once);
            messagesRepo.Verify(r => r.SaveChangesAsync(), Times.Once);
        }
Ejemplo n.º 3
0
        public IActionResult PostMessage(PostMessageRequest request)
        {
            var sender   = usersService.FindUserWithId(request.SenderId);
            var receiver = usersService.FindUserWithId(request.ReceiverId);
            var message  = new Message(request.Id, sender, receiver, request.Content);

            return(CreatedAtAction(null, messagesService.AddMessage(message)));
        }
Ejemplo n.º 4
0
        public async Task SendMessage(int productId, string giverId, string receiverId, string sentById, string sendMessage)
        {
            await messagesService.AddMessage(new MessagesChatVM {
                ProductId   = productId,
                GiverId     = giverId,
                ReceiverId  = receiverId,
                SentById    = sentById,
                SendMessage = sendMessage
            });

            var member = await membersService.GetUser(sentById);

            var user   = Context.GetHttpContext().User;
            var userId = membersService.GetUserId(user);
            await Clients.All.SendAsync("ReceiveMessage", member.Picture, member.FirstName, DateTime.Now, sendMessage, sentById == userId);
        }
        public void AddMessage_ForAnyRequest_CallsNotificationService()
        {
            _service.AddMessage("test");

            _messageSender.Verify(q => q.SendMessageToAllClients("test"), Times.Once);
        }
 private Message AddAMessage(Message message)
 {
     return(messagesService.AddMessage(message));
 }