Add basic callback to state manager to send STATUS on change.
This commit is contained in:
parent
12d7f6fdd2
commit
a18d4317e4
2 changed files with 20 additions and 5 deletions
|
@ -17,6 +17,7 @@ from typing import Any, Dict, List, NewType, Optional, Union
|
||||||
class StateManager:
|
class StateManager:
|
||||||
filepath = None
|
filepath = None
|
||||||
logger = None
|
logger = None
|
||||||
|
callbacks: List[Any] = []
|
||||||
__state = {}
|
__state = {}
|
||||||
__state_in_file = {}
|
__state_in_file = {}
|
||||||
# Dict of times that params can be updated after, if the time is before current time, it can be written immediately.
|
# Dict of times that params can be updated after, if the time is before current time, it can be written immediately.
|
||||||
|
@ -136,7 +137,18 @@ class StateManager:
|
||||||
self.state = state_to_update
|
self.state = state_to_update
|
||||||
|
|
||||||
if (update_file == True):
|
if (update_file == True):
|
||||||
|
# Either a routine write, or state has changed.
|
||||||
|
# Update the file
|
||||||
self.write_to_file(state_to_update)
|
self.write_to_file(state_to_update)
|
||||||
|
# Now tell any callback functions.
|
||||||
|
for callback in self.callbacks:
|
||||||
|
try:
|
||||||
|
callback()
|
||||||
|
except Exception as e:
|
||||||
|
self.logger.log.critical("Failed to execute status callback: {}".format(e))
|
||||||
|
|
||||||
|
def add_callback(self, function):
|
||||||
|
self.callbacks.append(function)
|
||||||
|
|
||||||
def _log(self, text:str, level: int = INFO):
|
def _log(self, text:str, level: int = INFO):
|
||||||
self.logger.log.log(level, "State Manager: " + text)
|
self.logger.log.log(level, "State Manager: " + text)
|
||||||
|
|
13
player.py
13
player.py
|
@ -470,6 +470,10 @@ class Player():
|
||||||
self.logger.log.info(("Sending: {}".format(response)))
|
self.logger.log.info(("Sending: {}".format(response)))
|
||||||
self.out_q.put(response)
|
self.out_q.put(response)
|
||||||
|
|
||||||
|
def _send_status(self):
|
||||||
|
self.last_msg = "STATUS"
|
||||||
|
self._retMsg(self.status, True)
|
||||||
|
|
||||||
def __init__(self, channel: int, in_q: multiprocessing.Queue, out_q: multiprocessing.Queue):
|
def __init__(self, channel: int, in_q: multiprocessing.Queue, out_q: multiprocessing.Queue):
|
||||||
|
|
||||||
process_title = "Player: Channel " + str(channel)
|
process_title = "Player: Channel " + str(channel)
|
||||||
|
@ -488,6 +492,9 @@ class Player():
|
||||||
|
|
||||||
self.state = StateManager("channel" + str(channel), self.logger,
|
self.state = StateManager("channel" + str(channel), self.logger,
|
||||||
self.__default_state, self.__rate_limited_params)
|
self.__default_state, self.__rate_limited_params)
|
||||||
|
|
||||||
|
self.state.add_callback(self._send_status)
|
||||||
|
|
||||||
self.state.update("channel", channel)
|
self.state.update("channel", channel)
|
||||||
|
|
||||||
loaded_state = copy.copy(self.state.state)
|
loaded_state = copy.copy(self.state.state)
|
||||||
|
@ -565,11 +572,7 @@ class Player():
|
||||||
if message_type in message_types.keys():
|
if message_type in message_types.keys():
|
||||||
message_types[message_type]()
|
message_types[message_type]()
|
||||||
|
|
||||||
if message_type != "STATUS":
|
|
||||||
## Then a super hacky hack. Send the status again to update Webstudio
|
|
||||||
self._updateState()
|
|
||||||
self.last_msg = "STATUS"
|
|
||||||
self._retMsg(self.status, True)
|
|
||||||
|
|
||||||
elif (self.last_msg == 'QUIT'):
|
elif (self.last_msg == 'QUIT'):
|
||||||
self.running = False
|
self.running = False
|
||||||
|
|
Loading…
Reference in a new issue