def add_active_client(self, client_name, thread_handle):
        def f():
            # Add if client isn't already in dict
            if not self.get_active_client_by_name(client_name):
                # Add client
                client_obj = Client(client_name, thread_handle)
                self.active_clients[client_obj.id] = client_obj

            # Do nothing if they're already a member
            # raise DuplicateClientError(client_name)

        safe(self.active_clients_lock, partial(f))
    def remove_member(self, client):
        def f():
            message = "{0} has left this chatroom.\n".format(client.name)

            message = ("CHAT:{0}\n"
                       "CLIENT_NAME:{1}\n"
                       "MESSAGE:{2}\n").format(self.id, client.name, message)

            self.send_message_to_all_members(message)

            self.members.pop(client.id, None)

            client.remove_chat_room(self)

        safe(self.lock, partial(f))
    def remove_active_client(self, client_name):
        def f():
            client = self.get_active_client_by_name(client_name)

            # Loop through chat rooms and remove client
            for chat_room in client.chat_rooms.values():
                chat_room.remove_member(client)

            client.thread_handle.terminate_request = True

            self.active_clients.pop(client.id)

        def g():
            safe(self.chat_rooms_lock, partial(f))

        safe(self.active_clients_lock, partial(g))
    def add_member(self, client):
        def f():
            if self.members.get(client.id):
                raise DuplicateChatClientError()
            self.members[client.id] = client

            message = "{0} has joined this chatroom.\n".format(client.name)

            message = ("CHAT:{0}\n"
                       "CLIENT_NAME:{1}\n"
                       "MESSAGE:{2}\n").format(self.id, client.name, message)

            self.send_message_to_all_members(message)

            client.add_chat_room(self)

        safe(self.lock, partial(f))
    def remove_member(self, client):
        def f():
            message = "{0} has left this chatroom.\n".format(client.name)

            message = (
                "CHAT:{0}\n"
                "CLIENT_NAME:{1}\n"
                "MESSAGE:{2}\n"
            ).format(self.id, client.name, message)

            self.send_message_to_all_members(message)

            self.members.pop(client.id, None)

            client.remove_chat_room(self)

        safe(self.lock, partial(f))
    def add_chat_room(self, chat_room_name):
        def f():
            chat_room = self.get_chat_room_by_name(chat_room_name)
            if not chat_room:
                chat_room = ChatRoom(chat_room_name)
                chat_room_id = chat_room.id
                self.chat_rooms[chat_room_id] = chat_room
            return chat_room

        return safe(self.chat_rooms_lock, partial(f))
    def add_member(self, client):
        def f():
            if self.members.get(client.id):
                raise DuplicateChatClientError()
            self.members[client.id] = client

            message = "{0} has joined this chatroom.\n".format(client.name)

            message = (
                "CHAT:{0}\n"
                "CLIENT_NAME:{1}\n"
                "MESSAGE:{2}\n"
            ).format(self.id, client.name, message)

            self.send_message_to_all_members(message)

            client.add_chat_room(self)

        safe(self.lock, partial(f))
 def g():
     safe(self.chat_rooms_lock, partial(f))