示例#1
0
        /// <summary>
        /// User calls this method to join a group. The group will be created if it doesn't exist.
        /// </summary>
        /// <param name="groupName"></param>
        /// <returns></returns>
        public async Task <Object> JoinGroup(string groupName)
        {
            if (groupName == null)
            {
                groupName = Guid.NewGuid().ToString();
            }
            ;

            string name = GetNameFromClaim();

            //  var group = context.Rooms.FirstOrDefault(e => e.RoomName == groupName);
            //Add to in-memory group
            await Groups.AddAsync(Context.ConnectionId, groupName);

            // Retrieve room if it exists. If it doesn't it will be created in the future.
            var group = context.Rooms.FirstOrDefault(e => e.RoomName == groupName);
            // Retrieve user.
            var user = context.Users.Include(u => u.ApplicationUserConversationRooms).SingleOrDefault(u => u.UserName == name);

            //Is the user already a member of the group? In that case, return info message to user stating this.
            if (user.ApplicationUserConversationRooms.FirstOrDefault(u => u.RoomName == groupName) != null)
            {
                return(Clients.User(Context.ConnectionId).SendAsync("addInfoMessageFromGroup", new[] { groupName, name + " is already a participant in group " + groupName }));
            }
            //Create Room
            if (group == null)
            {
                group = new ConversationRoom()
                {
                    RoomName = groupName
                };
            }

            ApplicationUserConversationRoom sRCR = new ApplicationUserConversationRoom()
            {
                ApplicationUserId = user.Id,
                ApplicationUser   = user,
                RoomName          = groupName,
                ConversationRoom  = group
            };

            group.ApplicationUserConversationRooms.Add(sRCR);
            context.ApplicationUserConversationRooms.Add(sRCR);
            user.ApplicationUserConversationRooms.Add(sRCR);

            await context.SaveChangesAsync();

            return(Clients.Group(groupName).SendAsync("userAddedToGroup", new[] { name, groupName }));
        }
示例#2
0
        /// <summary>
        /// Add a new user to an existing groupchat.
        /// </summary>
        /// <param name="groupName"></param>
        /// <param name="usernameToAdd"></param>
        /// <returns></returns>
        public async Task <Object> AddClientToGroup(string groupName, string usernameToAdd)
        {
            // Retrieve room if it exists.
            var group = context.Rooms.FirstOrDefault(e => e.RoomName == groupName);

            if (group == null)
            {
                return(Clients.Client(Context.ConnectionId).SendAsync("addInfoMessageFromGroup", new[] { groupName, groupName + "does not exist" }));
            }

            //Add user to in-memory group
            foreach (var connectionId in _connections.GetConnections(usernameToAdd))
            {
                await Groups.AddAsync(connectionId, groupName);
            }

            // Retrieve user.
            var user = context.Users.Include(u => u.ApplicationUserConversationRooms).SingleOrDefault(u => u.UserName == usernameToAdd);

            //Is the user already a member of the group? In that case, return info message stating this.
            if (user.ApplicationUserConversationRooms.FirstOrDefault(u => u.RoomName == groupName) != null)
            {
                return(Clients.Client(Context.ConnectionId).SendAsync("addInfoMessageFromGroup", new[] { groupName, usernameToAdd + " is already a participant in group " + groupName }));
            }

            ApplicationUserConversationRoom sRCR = new ApplicationUserConversationRoom()
            {
                ApplicationUserId = user.Id,
                ApplicationUser   = user,
                RoomName          = groupName,
                ConversationRoom  = group
            };

            group.ApplicationUserConversationRooms.Add(sRCR);
            context.ApplicationUserConversationRooms.Add(sRCR);
            user.ApplicationUserConversationRooms.Add(sRCR);

            await context.SaveChangesAsync();

            return(Clients.Group(groupName).SendAsync("userAddedToGroup", new[] { groupName, usernameToAdd }));
        }