public void JoinRoom(ChatUser user, ChatRoom room, string inviteCode)
{
// Throw if the room is private but the user isn't allowed
if (room.Private)
{
// First, check if the invite code is correct
if (!String.IsNullOrEmpty(inviteCode) && String.Equals(inviteCode, room.InviteCode, StringComparison.OrdinalIgnoreCase))
{
// It is, add the user to the allowed users so that future joins will work
room.AllowedUsers.Add(user);
}
if (!IsUserAllowed(room, user))
{
throw new InvalidOperationException(String.Format("Unable to join {0}. This room is locked and you don't have permission to enter. If you have an invite code, make sure to enter it in the /join command", room.Name));
}
}
// Add this user to the room
_repository.AddUserRoom(user, room);
// Clear the cache
_cache.RemoveUserInRoom(user, room);
}