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()