def start(): WorldLoader.load_data() server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) try: server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1) # Use SO_REUSEADDR if SO_REUSEPORT doesn't exist. except AttributeError: server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) server_socket.bind((config.Server.Connection.WorldServer.host, config.Server.Connection.WorldServer.port)) server_socket.listen() WorldServerSessionHandler.schedule_background_tasks() real_binding = server_socket.getsockname() Logger.success(f'World server started, listening on {real_binding[0]}:{real_binding[1]}\a') while WORLD_ON: # sck.accept() is a blocking call, we can't exit this loop gracefully. # noinspection PyBroadException try: (client_socket, client_address) = server_socket.accept() server_handler = WorldServerSessionHandler(client_socket, client_address) world_session_thread = threading.Thread(target=server_handler.handle) world_session_thread.daemon = True world_session_thread.start() except: break
def start(): Logger.success('Login server started.') ThreadedLoginServer.allow_reuse_address = True with ThreadedLoginServer((config.Server.Connection.RealmServer.host, config.Server.Connection.RealmServer.port), LoginServerSessionHandler) \ as login_instance: login_session_thread = threading.Thread(target=login_instance.serve_forever()) login_session_thread.daemon = True login_session_thread.start()
def start(): Logger.success('Proxy server started.') ThreadedProxyServer.allow_reuse_address = True with ThreadedProxyServer((config.Server.Connection.RealmServer.host, config.Server.Connection.RealmProxy.port), ProxyServerSessionHandler) \ as proxy_instance: proxy_session_thread = threading.Thread(target=proxy_instance.serve_forever()) proxy_session_thread.daemon = True proxy_session_thread.start()
def start(): ThreadedProxyServer.allow_reuse_address = True with ThreadedProxyServer((config.Server.Connection.RealmProxy.host, config.Server.Connection.RealmProxy.port), ProxyServerSessionHandler) \ as proxy_instance: Logger.success(f'Proxy server started, listening on {proxy_instance.server_address[0]}:{proxy_instance.server_address[1]}') try: proxy_session_thread = threading.Thread(target=proxy_instance.serve_forever()) proxy_session_thread.daemon = True proxy_session_thread.start() except KeyboardInterrupt: Logger.info("Proxy server turned off.")
def start(): WorldServerSessionHandler._load_data() Logger.success('World server started.') WorldServerSessionHandler.schedule_updates() ThreadedWorldServer.allow_reuse_address = True ThreadedWorldServer.timeout = 10 with ThreadedWorldServer((config.Server.Connection.RealmServer.host, config.Server.Connection.WorldServer.port), WorldServerSessionHandler) as world_instance: world_session_thread = threading.Thread(target=world_instance.serve_forever()) world_session_thread.daemon = True world_session_thread.start()
def start(): ThreadedLoginServer.allow_reuse_address = True with ThreadedLoginServer((config.Server.Connection.RealmServer.host, config.Server.Connection.RealmServer.port), LoginServerSessionHandler) \ as login_instance: Logger.success(f'Login server started, listening on {login_instance.server_address[0]}:{login_instance.server_address[1]}') # Make sure all characters have online = 0 on realm start. RealmDatabaseManager.character_set_all_offline() try: login_session_thread = threading.Thread(target=login_instance.serve_forever()) login_session_thread.daemon = True login_session_thread.start() except KeyboardInterrupt: Logger.info("Login server turned off.")
def _load_data(): # TODO: Use threads to load the data more efficiently if config.Server.Settings.load_gameobjects: Logger.info('Loading game objects...') gobject_number = WorldServerSessionHandler._load_gameobjects() Logger.success('%u game objects successfully loaded.' % gobject_number) else: Logger.info('Skipped game object loading.') if config.Server.Settings.load_creatures: Logger.info('Loading creature spawns...') creature_number = WorldServerSessionHandler._load_creatures() Logger.success('%u creature spawns successfully loaded.' % creature_number) else: Logger.info('Skipped creature loading.')
world_process = context.Process( target=WorldManager.WorldServerSessionHandler.start) world_process.start() try: if os.getenv('CONSOLE_MODE', config.Server.Settings.console_mode) in [ True, 'True', 'true' ]: while input() != 'exit': Logger.error('Invalid command.') else: world_process.join() except: Logger.info('Shutting down the core...') # Send SIGTERM to processes. world_process.terminate() Logger.info('World process terminated.') proxy_process.terminate() Logger.info('Proxy process terminated.') login_process.terminate() Logger.info('Login process terminated.') # Release process resources. Logger.info('Waiting to release resources...') release_process(world_process) release_process(proxy_process) release_process(login_process) Logger.success('Core gracefully shut down.')
def __init__(self, map_id, active_cell_callback): self.map_ = DbcDatabaseManager.map_get_by_id(map_id) self.grid_manager = GridManager(map_id, active_cell_callback) self.tiles_used = [[False for r in range(0, 64)] for c in range(0, 64)] self.tiles = [[None for r in range(0, 64)] for c in range(0, 64)] Logger.success(f'Initialized map {self.map_.MapName_enUS}')