def __init__(self, httpPort):
        super().__init__()
        self.mailbox = Mailbox.create_mailbox()
        self.messageRouterMailboxes = []  # Contains all message routers in system
        self.userToRouterMailbox = {}  # Maps a user name to residing message router. Used for private messages
        self.userToWebSocketConnection = {}  # Holds local web sockets connections
        self.pendingUserLoginToWebSocketConnection = {}  # Holds connections for users that are requesting login at user registry
        self.clientMessageHandlers = {
            MessageType.LOGIN: self.login_handler,
            MessageType.LOGOUT: self.logout_handler,
            MessageType.PUBLIC_MESSAGE: self.public_message_handler,
            MessageType.PRIVATE_MESSAGE: self.private_message_handler,
            MessageType.LIST_ALL_USERS: self.list_all_users_handler
        }
        self.serverMessageHandlers = {
            MessageType.USER_REGISTRY_NEW_USER: self.user_registry_new_user_handler,
            MessageType.USER_REGISTRY_REMOVE_USER: self.user_registry_remove_user_handler,
            MessageType.NEW_USER: self.new_user_handler,
            MessageType.REMOVE_USER: self.remove_user_handler,
            MessageType.NEW_MESSAGE_ROUTER: self.new_message_router_handler,
            MessageType.FORWARD_PUBLIC_MESSAGE_TO_ALL_CLIENTS: self.forward_public_message_to_all_clients_handler,
            MessageType.FORWARD_PRIVATE_MESSAGE_TO_CLIENT: self.forward_private_message_to_client
        }

        self.userRegistryMailbox = self.mailbox.get_mailbox_proxy('user_registry')
        self.loadBalancerMailbox = self.mailbox.get_mailbox_proxy('load_balancer')

        # Notify load balancer about this message router
        msg = self.mailbox.create_message(MessageType.REGISTER_CHAT_SERVER, httpPort)
        self.loadBalancerMailbox.put(msg)
 def __init__(self):
     super().__init__()
     self.serverList = []
     self.serverListLock = threading.Lock()
     self.mailbox = Mailbox.create_mailbox('load_balancer')
def main():
    user_registry = UserRegistry(Mailbox.create_mailbox('user_registry'), 1)
    user_registry.start()
    user_registry.join()