moonraker: rework klippy state events

Emit specific events for each klippy state rather than one for all of them.

Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
This commit is contained in:
Arksine 2020-08-15 20:09:17 -04:00
parent 56bd9a61ea
commit 279d53afde
4 changed files with 21 additions and 26 deletions

View File

@ -189,7 +189,7 @@ class Server:
request.notify(ServerError("Klippy Disconnected", 503)) request.notify(ServerError("Klippy Disconnected", 503))
self.pending_requests = {} self.pending_requests = {}
logging.info("Klippy Connection Removed") logging.info("Klippy Connection Removed")
self.send_event("server:klippy_state_changed", "disconnect") self.send_event("server:klippy_disconnect")
self.ioloop.call_later(1., self._connect_klippy) self.ioloop.call_later(1., self._connect_klippy)
async def _initialize(self): async def _initialize(self):
@ -250,7 +250,7 @@ class Server:
logging.info("Klippy ready") logging.info("Klippy ready")
self.klippy_state = "ready" self.klippy_state = "ready"
self.init_list.append('klippy_ready') self.init_list.append('klippy_ready')
self.send_event("server:klippy_state_changed", "ready") self.send_event("server:klippy_ready")
else: else:
msg = result.get('state_message', "Klippy Not Ready") msg = result.get('state_message', "Klippy Not Ready")
logging.info("\n" + msg) logging.info("\n" + msg)
@ -298,7 +298,7 @@ class Server:
if state is not None: if state is not None:
if state == "shutdown": if state == "shutdown":
logging.info("Klippy has shutdown") logging.info("Klippy has shutdown")
self.send_event("server:klippy_state_changed", "shutdown") self.send_event("server:klippy_shutdown")
self.klippy_state = state self.klippy_state = state
self.send_event("server:status_update", status) self.send_event("server:status_update", status)

View File

@ -177,7 +177,11 @@ class PanelDue:
# Register server events # Register server events
self.server.register_event_handler( self.server.register_event_handler(
"server:klippy_state_changed", self.handle_klippy_state) "server:klippy_ready", self._process_klippy_ready)
self.server.register_event_handler(
"server:klippy_shutdown", self._process_klippy_shutdown)
self.server.register_event_handler(
"server:klippy_disconnect", self._process_klippy_disconnect)
self.server.register_event_handler( self.server.register_event_handler(
"server:status_update", self.handle_status_update) "server:status_update", self.handle_status_update)
self.server.register_event_handler( self.server.register_event_handler(
@ -211,15 +215,6 @@ class PanelDue:
'M999': lambda args: "FIRMWARE_RESTART" 'M999': lambda args: "FIRMWARE_RESTART"
} }
async def handle_klippy_state(self, state):
# XXX - Add a "connected" state and send a "C" to paneldue?
if state == "ready":
await self._process_klippy_ready()
elif state == "shutdown":
await self._process_klippy_shutdown()
elif state == "disconnect":
await self._process_klippy_disconnect()
async def _process_klippy_ready(self): async def _process_klippy_ready(self):
# Request "info" and "configfile" status # Request "info" and "configfile" status
retries = 10 retries = 10

View File

@ -24,17 +24,14 @@ class TemperatureStore:
self.server.register_event_handler( self.server.register_event_handler(
"server:status_update", self._set_current_temps) "server:status_update", self._set_current_temps)
self.server.register_event_handler( self.server.register_event_handler(
"server:klippy_state_changed", self._init_sensors) "server:klippy_ready", self._init_sensors)
# Register endpoint # Register endpoint
self.server.register_endpoint( self.server.register_endpoint(
"/server/temperature_store", "server_temperature_store", ['GET'], "/server/temperature_store", "server_temperature_store", ['GET'],
self._handle_temp_store_request) self._handle_temp_store_request)
async def _init_sensors(self, state): async def _init_sensors(self):
if state != "ready":
return
klippy_apis = self.server.lookup_plugin('klippy_apis') klippy_apis = self.server.lookup_plugin('klippy_apis')
# Fetch sensors # Fetch sensors
try: try:

View File

@ -11,6 +11,9 @@ from tornado.ioloop import IOLoop
from tornado.websocket import WebSocketHandler, WebSocketClosedError from tornado.websocket import WebSocketHandler, WebSocketClosedError
from utils import ServerError from utils import ServerError
class Sentinel:
pass
class JsonRPC: class JsonRPC:
def __init__(self): def __init__(self):
self.methods = {} self.methods = {}
@ -105,7 +108,7 @@ class WebsocketManager:
# Register events # Register events
self.server.register_event_handler( self.server.register_event_handler(
"server:klippy_state_changed", self._handle_klippy_state_changed) "server:klippy_disconnect", self._handle_klippy_disconnect)
self.server.register_event_handler( self.server.register_event_handler(
"server:gcode_response", self._handle_gcode_response) "server:gcode_response", self._handle_gcode_response)
self.server.register_event_handler( self.server.register_event_handler(
@ -113,8 +116,8 @@ class WebsocketManager:
self.server.register_event_handler( self.server.register_event_handler(
"file_manager:filelist_changed", self._handle_filelist_changed) "file_manager:filelist_changed", self._handle_filelist_changed)
async def _handle_klippy_state_changed(self, state): async def _handle_klippy_disconnect(self):
await self.notify_websockets("klippy_state_changed", state) await self.notify_websockets("klippy_disconnected")
async def _handle_gcode_response(self, response): async def _handle_gcode_response(self, response):
await self.notify_websockets("gcode_response", response) await self.notify_websockets("gcode_response", response)
@ -171,11 +174,11 @@ class WebsocketManager:
if old_ws is not None: if old_ws is not None:
logging.info(f"Websocket Removed: {ws.uid}") logging.info(f"Websocket Removed: {ws.uid}")
async def notify_websockets(self, name, data): async def notify_websockets(self, name, data=Sentinel):
notification = json.dumps({ msg = {'jsonrpc': "2.0", 'method': "notify_" + name}
'jsonrpc': "2.0", if data != Sentinel:
'method': "notify_" + name, msg['params'] = [data]
'params': [data]}) notification = json.dumps(msg)
async with self.ws_lock: async with self.ws_lock:
for ws in list(self.websockets.values()): for ws in list(self.websockets.values()):
try: try: