1
0
mirror of https://github.com/GNS3/gns3-server synced 2024-12-02 21:28:10 +00:00

Fix Can't connect to compute local on some computers

Chicken and egg problem we try to connect to compute
before http was available. I rewrote the code to prevent
erase of settings and rollback the beta4 code for init.

Fix #946
This commit is contained in:
Julien Duponchelle 2017-03-21 18:06:45 +01:00
parent 1566d7f12a
commit 8712866489
No known key found for this signature in database
GPG Key ID: CE8B29639E07F5E8
3 changed files with 20 additions and 3 deletions

View File

@ -248,7 +248,6 @@ class Controller:
""" """
Store settings shared by the different GUI will be replace by dedicated API later. Dictionnary Store settings shared by the different GUI will be replace by dedicated API later. Dictionnary
""" """
assert self._settings is not None
return self._settings return self._settings
@settings.setter @settings.setter

View File

@ -103,7 +103,15 @@ class ServerHandler:
description="Retrieve gui settings from the server. Temporary will we removed in later release") description="Retrieve gui settings from the server. Temporary will we removed in later release")
def read_settings(request, response): def read_settings(request, response):
response.json(Controller.instance().settings) settings = None
while True:
# The init of the server could take some times
# we ensure settings are loaded before returning them
settings = Controller.instance().settings
if settings is not None:
break
yield from asyncio.sleep(0.5)
response.json(settings)
@Route.post( @Route.post(
r"/settings", r"/settings",
@ -113,6 +121,8 @@ class ServerHandler:
}) })
def write_settings(request, response): def write_settings(request, response):
controller = Controller.instance() controller = Controller.instance()
if controller.settings is None: # Server is not loaded ignore settings update to prevent buggy client sync issue
return
controller.settings = request.json controller.settings = request.json
try: try:
controller.save() controller.save()

View File

@ -186,6 +186,13 @@ class WebServer:
atexit.register(close_asyncio_loop) atexit.register(close_asyncio_loop)
@asyncio.coroutine
def _on_startup(self, *args):
"""
Called when the HTTP server start
"""
yield from Controller.instance().start()
def run(self): def run(self):
""" """
Starts the server. Starts the server.
@ -225,8 +232,9 @@ class WebServer:
for key, val in os.environ.items(): for key, val in os.environ.items():
log.debug("ENV %s=%s", key, val) log.debug("ENV %s=%s", key, val)
self._loop.run_until_complete(Controller.instance().start())
self._app = aiohttp.web.Application() self._app = aiohttp.web.Application()
# Background task started with the server
self._app.on_startup.append(self._on_startup)
# Allow CORS for this domains # Allow CORS for this domains
cors = aiohttp_cors.setup(self._app, defaults={ cors = aiohttp_cors.setup(self._app, defaults={