public async Task <IActionResult> RemoveUserFromGroup(JoinGroupModels join) { if (!ModelState.IsValid) { return(BadRequest()); } var group = ChatStore.UsersByGroups.Find(x => x.GroupName == join.Group); if (group == null) { return(NotFound()); } else { var currentUser = ChatStore.UsersOnline.Find(x => x.Username == User.Identity.Name); if (currentUser == null) { return(NotFound("User Not Connected")); } var userAlreadyJoin = group.Users.Find(x => x.Username == currentUser.Username); if (userAlreadyJoin != null) { group.Users.Remove(userAlreadyJoin); await _chatHubContext.Groups.RemoveFromGroupAsync(currentUser.ConnectionId, group.GroupName); } } return(Ok()); }
public ActionResult JoinGroup(JoinGroupModels models) { var checkclassid = from c in _context.UserClass where c.ClassID == models.ClassID select new { Classid = c.ClassID }; if (!checkclassid.Any()) { ModelState.AddModelError("JoinDupGroupNotExist", errorMessage: "Class Doesn't Exist. Please enter new Class ID"); return(View(models)); } models.StudentID = User.Identity.GetUserId(); models.classdetail = RandomCode.RandomString(10); UserInClass iin = new UserInClass() { StudentID = models.StudentID, ClassID = models.ClassID }; iin.classdetail = models.classdetail; var query = from dup in _context.UserInClasses where (dup.ClassID == models.ClassID && dup.StudentID == models.StudentID) select new { dupname = dup.StudentID }; foreach (var i in query) { if (i.dupname == models.StudentID) { ModelState.AddModelError("JoinDupGroupError", errorMessage: "You Already Join This Group"); return(View(models)); } } try { } catch (Exception) { ModelState.AddModelError("JoinGroupError", errorMessage: "Cannot Join Group At This Time"); return(View(models)); } _context.UserInClasses.Add(iin); _context.SaveChanges(); return(RedirectToAction("StudentGroupView")); }
public async Task <IActionResult> AddUserToGroupAsync(JoinGroupModels join) { if (!ModelState.IsValid) { return(BadRequest()); } var group = ChatStore.UsersByGroups.Find(x => x.GroupName == join.Group); if (group == null) { return(NotFound("Group not exists")); } else { var currentUser = ChatStore.UsersOnline.Find(x => x.Username == join.Username); if (currentUser == null) { return(NotFound("User Not Connected")); } var userAlreadyJoin = group.Users.Find(x => x.Username == currentUser.Username); if (userAlreadyJoin == null) { group.Users.Add(currentUser); await _chatHubContext.Groups.AddToGroupAsync(currentUser.ConnectionId, group.GroupName); await _chatHubContext.Clients .Group(group.GroupName) .SendAsync("NewUserInGroup", new JoinGroupNotifyModel { User = currentUser, Group = group.GroupName }); // Scrittura equivalente ma meno comprensibile //await _chatHubContext.Clients // .Clients(group.Users.Select(x => x.ConnectionId).ToList()) // .SendAsync("NewUserInGroup", new JoinGroupNotifyModel // { // User = currentUser, // Group = group.GroupName // }); } } return(Ok()); }
public async Task <IActionResult> RemoveUserFromGroupAsync(JoinGroupModels join) { if (!ModelState.IsValid) { return(BadRequest()); } var group = ChatStore.UsersByGroups.Find(x => x.GroupName == join.Group); if (group == null) { return(NotFound()); } else { var currentUser = ChatStore.UsersOnline.Find(x => x.Username == join.Username); if (currentUser == null) { return(NotFound("User Not Connected")); } var userAlreadyJoin = group.Users.Find(x => x.Username == currentUser.Username); if (userAlreadyJoin != null) { group.Users.Remove(userAlreadyJoin); await _chatHubContext.Groups.RemoveFromGroupAsync(currentUser.ConnectionId, group.GroupName); //await _chatHubContext.Clients.Group(group.GroupName).SendAsync("NewUserLeaveGroup", currentUser); await _chatHubContext.Clients .Clients(group.Users.Select(x => x.ConnectionId).ToList()) .SendAsync("NewUserLeaveGroup", new JoinGroupNotifyModel { User = currentUser, Group = group.GroupName }); } } return(Ok()); }