Exemplo n.º 1
0
        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());
        }
Exemplo n.º 2
0
        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"));
        }
Exemplo n.º 3
0
        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());
        }
Exemplo n.º 4
0
        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());
        }