Example #1
0
    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
Example #2
0
    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()
Example #3
0
    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()
Example #4
0
 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.")
Example #5
0
    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()
Example #6
0
 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.")
Example #7
0
    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.')
Example #8
0
    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.')
Example #9
0
 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}')