From fdec6277eb5564b7371a64282d7facd3d727fee0 Mon Sep 17 00:00:00 2001 From: Arksine Date: Thu, 3 Sep 2020 12:27:13 -0400 Subject: [PATCH] moonraker: handle Klippy disconnects during initialization Signed-off-by: Eric Callahan --- moonraker/moonraker.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/moonraker/moonraker.py b/moonraker/moonraker.py index 87fb5f9..c0c495e 100644 --- a/moonraker/moonraker.py +++ b/moonraker/moonraker.py @@ -47,6 +47,7 @@ class Server: self.klippy_connection = KlippyConnection( self.process_command, self.on_connection_closed) self.init_list = [] + self.init_handle = None self.init_attempts = 0 self.klippy_state = "disconnected" @@ -192,6 +193,8 @@ class Server: self.pending_requests = {} logging.info("Klippy Connection Removed") self.send_event("server:klippy_disconnect") + if self.init_handle is not None: + self.ioloop.remove_timeout(self.init_handle) self.ioloop.call_later(.25, self._connect_klippy) async def _initialize(self): @@ -217,14 +220,16 @@ class Server: else: logging.info("GCode Output Subscribed") self.init_list.append("gcode_output_sub") - if "klippy_ready" in self.init_list: - # Moonraker is enabled in the Klippy module - # and Klippy is ready. We can stop the init - # procedure. + if "klippy_ready" in self.init_list or \ + not self.klippy_connection.is_connected(): + # Either Klippy is ready or the connection dropped + # during initialization. Exit initialization self.init_attempts = 0 + self.init_handle = None else: self.init_attempts += 1 - self.ioloop.call_later(INIT_TIME, self._initialize) + self.init_handle = self.ioloop.call_later( + INIT_TIME, self._initialize) async def _request_endpoints(self): result = await self.klippy_apis.list_endpoints(default=None)