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:
parent
1566d7f12a
commit
8712866489
@ -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
|
||||||
|
@ -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()
|
||||||
|
@ -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={
|
||||||
|
Loading…
Reference in New Issue
Block a user