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)); } }
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()); }
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()); }
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()); }
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()); }