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