simplyprint: implement ping timer
Signed-off-by: Eric Callahan <arksine.code@gmail.com>
This commit is contained in:
parent
f8d15d3baa
commit
d5fa40df87
|
@ -53,7 +53,8 @@ PROD_ENDPOINT = f"wss://ws.simplyprint.io/{SP_VERSION}/p"
|
||||||
# TODO: Increase this time to something greater, perhaps 30 minutes
|
# TODO: Increase this time to something greater, perhaps 30 minutes
|
||||||
CONNECTION_ERROR_LOG_TIME = 60.
|
CONNECTION_ERROR_LOG_TIME = 60.
|
||||||
PRE_SETUP_EVENTS = [
|
PRE_SETUP_EVENTS = [
|
||||||
"connection", "state_change", "shutdown", "machine_data", "firmware"
|
"connection", "state_change", "shutdown", "machine_data", "firmware",
|
||||||
|
"ping"
|
||||||
]
|
]
|
||||||
|
|
||||||
class SimplyPrint(Subscribable):
|
class SimplyPrint(Subscribable):
|
||||||
|
@ -86,7 +87,8 @@ class SimplyPrint(Subscribable):
|
||||||
"temps": 1.,
|
"temps": 1.,
|
||||||
"temps_target": .25,
|
"temps_target": .25,
|
||||||
"cpu": 10.,
|
"cpu": 10.,
|
||||||
"ai": 0.
|
"ai": 0.,
|
||||||
|
"ping": 20.,
|
||||||
}
|
}
|
||||||
self.printer_status: Dict[str, Dict[str, Any]] = {}
|
self.printer_status: Dict[str, Dict[str, Any]] = {}
|
||||||
self.heaters: Dict[str, str] = {}
|
self.heaters: Dict[str, str] = {}
|
||||||
|
@ -95,6 +97,8 @@ class SimplyPrint(Subscribable):
|
||||||
self.connection_task: Optional[asyncio.Task] = None
|
self.connection_task: Optional[asyncio.Task] = None
|
||||||
self.reconnect_delay: float = 1.
|
self.reconnect_delay: float = 1.
|
||||||
self.reconnect_token: Optional[str] = None
|
self.reconnect_token: Optional[str] = None
|
||||||
|
self._last_sp_ping: float = 0.
|
||||||
|
self.ping_sp_timer = self.eventloop.register_timer(self._handle_sp_ping)
|
||||||
self.printer_info_timer = self.eventloop.register_timer(
|
self.printer_info_timer = self.eventloop.register_timer(
|
||||||
self._handle_printer_info_update)
|
self._handle_printer_info_update)
|
||||||
self._print_request_event: asyncio.Event = asyncio.Event()
|
self._print_request_event: asyncio.Event = asyncio.Event()
|
||||||
|
@ -239,6 +243,7 @@ class SimplyPrint(Subscribable):
|
||||||
self._process_message(message)
|
self._process_message(message)
|
||||||
elif message is None:
|
elif message is None:
|
||||||
self.webcam_stream.stop()
|
self.webcam_stream.stop()
|
||||||
|
self.ping_sp_timer.stop()
|
||||||
cur_time = self.eventloop.get_loop_time()
|
cur_time = self.eventloop.get_loop_time()
|
||||||
ping_time: float = cur_time - self._last_ping_received
|
ping_time: float = cur_time - self._last_ping_received
|
||||||
reason = code = None
|
reason = code = None
|
||||||
|
@ -289,6 +294,7 @@ class SimplyPrint(Subscribable):
|
||||||
self.save_item("printer_name", name)
|
self.save_item("printer_name", name)
|
||||||
self.reconnect_delay = 1.
|
self.reconnect_delay = 1.
|
||||||
self._push_initial_state()
|
self._push_initial_state()
|
||||||
|
self.ping_sp_timer.start()
|
||||||
elif event == "error":
|
elif event == "error":
|
||||||
logging.info(f"SimplyPrint Connection Error: {data}")
|
logging.info(f"SimplyPrint Connection Error: {data}")
|
||||||
self.reconnect_delay = 30.
|
self.reconnect_delay = 30.
|
||||||
|
@ -336,6 +342,9 @@ class SimplyPrint(Subscribable):
|
||||||
elif event == "interval_change":
|
elif event == "interval_change":
|
||||||
if isinstance(data, dict):
|
if isinstance(data, dict):
|
||||||
self._update_intervals(data)
|
self._update_intervals(data)
|
||||||
|
elif event == "pong":
|
||||||
|
diff = self.eventloop.get_loop_time() - self._last_sp_ping
|
||||||
|
self.send_sp("latency", {"ms": int(diff * 1000 + .5)})
|
||||||
else:
|
else:
|
||||||
# TODO: It would be good for the backend to send an
|
# TODO: It would be good for the backend to send an
|
||||||
# event indicating that it is ready to recieve printer
|
# event indicating that it is ready to recieve printer
|
||||||
|
@ -808,6 +817,11 @@ class SimplyPrint(Subscribable):
|
||||||
self._update_job_progress()
|
self._update_job_progress()
|
||||||
return eventtime + self.intervals["job"]
|
return eventtime + self.intervals["job"]
|
||||||
|
|
||||||
|
def _handle_sp_ping(self, eventtime: float) -> float:
|
||||||
|
self._last_sp_ping = eventtime
|
||||||
|
self.send_sp("ping", None)
|
||||||
|
return eventtime + self.intervals["ping"]
|
||||||
|
|
||||||
def _update_job_progress(self) -> None:
|
def _update_job_progress(self) -> None:
|
||||||
job_info: Dict[str, Any] = {}
|
job_info: Dict[str, Any] = {}
|
||||||
est_time = self.cache.metadata.get("estimated_time")
|
est_time = self.cache.metadata.get("estimated_time")
|
||||||
|
@ -1081,6 +1095,7 @@ class SimplyPrint(Subscribable):
|
||||||
self.webcam_stream.stop()
|
self.webcam_stream.stop()
|
||||||
self.amb_detect.stop()
|
self.amb_detect.stop()
|
||||||
self.printer_info_timer.stop()
|
self.printer_info_timer.stop()
|
||||||
|
self.ping_sp_timer.stop()
|
||||||
await self.send_sp("shutdown", None)
|
await self.send_sp("shutdown", None)
|
||||||
self._logger.close()
|
self._logger.close()
|
||||||
self.is_closing = True
|
self.is_closing = True
|
||||||
|
|
Loading…
Reference in New Issue