Esempio n. 1
0
        public async Task <IActionResult> PostMessage([FromBody] MessageDTO message)
        {
            if (!ModelState.IsValid || message == null)
            {
                return(BadRequest("Bad Request"));
            }

            if (!DateTime.TryParse(message.Date, out DateTime messageDate))
            {
                return(BadRequest("Provided datetime is not valid."));
            }

            Chat chat;
            User user;

            if (int.TryParse(message.SenderId, out int senderId) && int.TryParse(message.ChatId, out int chatid))
            {
                (chat, user) = await _repository.GetMessageCointainer(senderId, chatid).ConfigureAwait(true);
            }
            else
            {
                return(BadRequest("SenderId or receiverId has a wrong format."));
            }

            if (chat == null || user == null)
            {
                return(BadRequest("Cannot find chat or user."));
            }

            await _repository.SendMessage(new Message
            {
                Sender     = user,
                SenderName = user.Email,
                Chat       = chat,
                Date       = messageDate,
                Content    = message.Content
            }).ConfigureAwait(true);

            var messageChartModel = new MessageChartModel
            {
                ChatId     = chat.Id,
                SenderName = user.Email,
                Content    = message.Content,
                Date       = messageDate
            };

            object[]          param   = { messageChartModel };
            IEnumerable <int> userIds = chat.ChatMemberships.Select(x => x.User.Id);

            foreach (int userId in userIds)
            {
                string connectionId = _service.GetConnectionId(userId);
                if (connectionId != null && connectionId.Trim().Length != 0)
                {
                    _ = _hub.Clients.Client(connectionId).SendAsync("transferchartdata", param).ConfigureAwait(true);
                }
            }

            return(Ok(new { V = "received message" }));
        }