public async Task <IActionResult> SendMessageAsync([FromBody] MessageViewModel message)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }
            var msg = Mapper.Map <Message>(message);

            msg.Date = DateTime.Now;
            var sentMsg = await ChatContext.MessageManager.SendMessageAsync(msg);

            if (sentMsg == null)
            {
                ModelState.AddModelError("Invalid Message", "ChatId is not valid !");
                return(BadRequest(ModelState));
            }
            var sentMsgDto = Mapper.Map <MessageViewModel>(sentMsg);

            if (ConnectionMap.GetConnections(ChatContext.CurrentUser.Id).Count() > 1)
            {
                _ = HubContext.Clients.Group(sentMsgDto.ChatId).SendAsync(SignalRClientMethod.ReceiveMessage, sentMsgDto);
                return(Ok());
            }

            else
            {
                _ = HubContext.Clients.GroupExcept(sentMsgDto.ChatId, ConnectionMap.GetConnections(ChatContext.CurrentUser.Id).First()).SendAsync(SignalRClientMethod.ReceiveMessage, sentMsgDto);
                return(Ok(sentMsgDto));
            }
        }
Esempio n. 2
0
        public async Task <IActionResult> Accept([FromRoute] string requestId)
        {
            var contact = await ChatContext.ContactManager.AcceptAddFriendRequestAsync(requestId);

            if (contact != null)
            {
                var contactDto  = Mapper.Map <ContactViewModel>(contact);
                var currUserDto = Mapper.Map <ContactViewModel>(ChatContext.CurrentUser);

                var contactConnections = new List <string>(ConnectionMap.GetConnections(contact.Id));
                _ = HubContext.Clients.Clients(contactConnections).SendAsync(SignalRClientMethod.ReceiveFriendRequestResponse, requestId, currUserDto);

                var currConnections = new List <string>(ConnectionMap.GetConnections(ChatContext.CurrentUser.Id));
                _ = HubContext.Clients.Clients(currConnections).SendAsync(SignalRClientMethod.ReceiveFriendRequestResponse, requestId, contactDto);

                var chat = await ChatContext.ChatManager.GetChatWithAsync(contact.Id);

                foreach (var connection in contactConnections.Concat(currConnections))
                {
                    _ = HubContext.Groups.AddToGroupAsync(connection, chat.Id);
                }

                return(Ok(new { requestId, contact = contactDto }));
            }
            return(BadRequest());
        }
Esempio n. 3
0
        public async Task <IActionResult> Remove([FromRoute] string requestId)
        {
            var request = await ChatContext.ContactManager.RemoveFriendRequestByIdAsync(requestId);

            if (request != null)
            {
                var userId      = request.ToUserId == ChatContext.CurrentUser.Id ? request.FromUserId : request.ToUserId;
                var connections = new List <string>(ConnectionMap.GetConnections(userId));
                _ = HubContext.Clients.Clients(connections).SendAsync(SignalRClientMethod.ReceiveFriendRequestResponse, requestId, null);
                return(Ok(true));
            }
            return(BadRequest());
        }
Esempio n. 4
0
        public async Task <IActionResult> Send([FromRoute] string toUserId)
        {
            var request = await ChatContext.ContactManager.SendAddFriendRequestAsync(toUserId);

            if (request != null)
            {
                var requestDto = Mapper.Map <FriendRequestViewModel>(request);

                var connections = new List <string>(ConnectionMap.GetConnections(request.ToUserId));

                _ = HubContext.Clients.Clients(connections).SendAsync(SignalRClientMethod.ReceiveFriendRequest, requestDto);
                return(Ok(requestDto));
            }
            return(BadRequest());
        }
Esempio n. 5
0
        public override Task OnReconnected()
        {
            string key          = Context.QueryString["Key"];
            string connectionId = Context.ConnectionId;

            if (string.IsNullOrEmpty(key))
            {
                return(base.OnReconnected());
            }

            if (!ConnectionMap.GetConnections(key).Contains(connectionId))
            {
                ConnectionMap.Add(key, connectionId);
                BroadcastConnectionMap();
            }

            return(base.OnReconnected());
        }