changed current usage of callbacks to match new API

This commit is contained in:
Artem30801
2020-10-25 21:48:29 +03:00
parent 42bb55d78f
commit ca8e960318
4 changed files with 52 additions and 49 deletions

View File

@@ -51,7 +51,8 @@ class Client(object):
self.selector = selectors.DefaultSelector()
self.client_socket = None
self.server_connection = messaging.ConnectionManager()
self.callbacks = messaging.CallbackManager()
self.server_connection = messaging.ConnectionManager(self.callbacks)
self.connected = False
self.client_id = None
@@ -60,6 +61,7 @@ class Client(object):
self.config = ConfigManager()
self.config_path = config_path
global active_client
active_client = self
@@ -120,6 +122,7 @@ class Client(object):
Reloads config and starts infinite loop of connecting to the server and processing said connection. Calling of this method will indefinitely halt execution of any subsequent code.
"""
self.load_config()
self.register_callbacks()
logger.info("Starting client")
messaging.NotifierSock().init(self.selector)
@@ -245,48 +248,47 @@ class Client(object):
logger.warning("No active connections left!")
return
def register_callbacks(self):
@self.callbacks.action_callback("config")
def _command_config_write(*args, **kwargs):
mode = kwargs.get("mode", "modify")
# exceptions would be risen in case of incorrect config
if mode == "rewrite":
active_client.config.load_from_dict(kwargs["config"], configspec=active_client.config_path) # with validation
elif mode == "modify":
new_config = ConfigManager()
new_config.load_from_dict(kwargs["config"])
active_client.config.merge(new_config, validate=True)
@messaging.message_callback("config")
def _command_config_write(*args, **kwargs):
mode = kwargs.get("mode", "modify")
# exceptions would be risen in case of incorrect config
if mode == "rewrite":
active_client.config.load_from_dict(kwargs["config"], configspec=active_client.config_path) # with validation
elif mode == "modify":
new_config = ConfigManager()
new_config.load_from_dict(kwargs["config"])
active_client.config.merge(new_config, validate=True)
active_client.config.write()
logger.info("Config successfully updated from command")
active_client.load_config()
active_client.config.write()
logger.info("Config successfully updated from command")
active_client.load_config()
@self.callbacks.request_callback("config")
def _response_config(*args, **kwargs):
send_configspec = kwargs.get("send_configspec", False)
response = {"config": active_client.config.full_dict()}
if send_configspec:
response.update({"configspec": dict(active_client.config.config.configspec)})
return response
@messaging.request_callback("config")
def _response_config(*args, **kwargs):
send_configspec = kwargs.get("send_configspec", False)
response = {"config": active_client.config.full_dict()}
if send_configspec:
response.update({"configspec": dict(active_client.config.config.configspec)})
return response
@self.callbacks.request_callback("clover_dir")
def _response_clover_dir(*args, **kwargs):
return active_client.config.clover_dir
@messaging.request_callback("clover_dir")
def _response_clover_dir(*args, **kwargs):
return active_client.config.clover_dir
@self.callbacks.request_callback("id")
def _response_id(*args, **kwargs):
new_id = kwargs.get("new_id", None)
if new_id is not None:
active_client.config.set("PRIVATE", "id", new_id, True)
active_client.load_config()
# TODO renaming here
@messaging.request_callback("id")
def _response_id(*args, **kwargs):
new_id = kwargs.get("new_id", None)
if new_id is not None:
active_client.config.set("PRIVATE", "id", new_id, True)
active_client.load_config()
# TODO renaming here
return active_client.client_id
return active_client.client_id
@messaging.request_callback("time")
def _response_time(*args, **kwargs):
return active_client.time_now()
@self.callbacks.request_callback("time")
def _response_time(*args, **kwargs):
return active_client.time_now()
if __name__ == "__main__":

View File

@@ -344,10 +344,8 @@ class ConnectionManager(object):
resume_queue (bool): Whether to resume sending queue upon peer reconnection.
resend_requests (bool): Whether to resend unanswered requests in queue to reconnected client.
"""
messages_callbacks = {}
requests_callbacks = {}
def __init__(self, whoami="computer"):
def __init__(self, callbacks, whoami="computer"):
"""
Args:
whoami (str, optional): What type of system the ConnectionManager is running on (`computer` or `pi`). Defaults to "computer".
@@ -359,6 +357,8 @@ class ConnectionManager(object):
connection.connect(client_selector, client_socket, client_addr)
```
"""
self.callbacks = callbacks
self.selector = None
self.socket = None
self.addr = None
@@ -462,7 +462,7 @@ class ConnectionManager(object):
logger.info("CLOSED connection to {}".format(self.addr))
def process_events(self, mask):
"""Processes read\write events with given mask.
"""Processes read/write events with given mask.
Args:
mask (bytes): mask of the selector events.
@@ -538,7 +538,7 @@ class ConnectionManager(object):
action = message.jsonheader["action"]
args = message.content["args"]
kwargs = message.content["kwargs"]
callback = self.messages_callbacks.get(action, None)
callback = self.callbacks.action_callbacks.get(action, None)
if callback is None:
logger.warning("Action {} does not exist!".format(action))
return
@@ -559,7 +559,7 @@ class ConnectionManager(object):
if filetransfer:
value = self._read_file(kwargs["filepath"])
else:
callback = self.requests_callbacks.get(requested_value, None)
callback = self.callbacks.request_callbacks.get(requested_value, None)
if callback is None:
logger.warning("Request {} does not exist!".format(requested_value))
return

View File

@@ -52,6 +52,8 @@ class Server(messaging.Singleton):
self.config = ConfigManager()
self.config_path = config_path
self.callbacks = messaging.CallbackManager()
# Init threads
self.autoconnect_thread = threading.Thread(target=self._client_processor, daemon=True,
name='Client processor')
@@ -170,8 +172,8 @@ class Server(messaging.Singleton):
logging.info("Got connection from: {}".format(str(addr)))
conn.setblocking(False)
if not any([client_addr == addr[0] for client_addr in Client.clients.keys()]):
client = Client(addr[0])
if not any(client_addr == addr[0] for client_addr in Client.clients.keys()):
client = Client(self.callbacks, addr[0])
client.buffer_size = self.config.server_buffer_size
logging.info("New client")
else:
@@ -271,7 +273,6 @@ def requires_any_connected(f):
return wrapper
# TODO do a factory class for clients\connection managers with common properties
class Client(messaging.ConnectionManager):
clients = {}
@@ -279,8 +280,8 @@ class Client(messaging.ConnectionManager):
on_first_connect = None
on_disconnect = None
def __init__(self, ip):
super().__init__()
def __init__(self, callbacks, ip):
super().__init__(callbacks)
self.copter_id = None
self.clover_dir = None
self.connected = False

View File

@@ -631,7 +631,7 @@ class MainWindow(QtWidgets.QMainWindow):
ConfigDialog().call_config_dialog(config, save_callback, restart, name="server config")
def register_callbacks(self):
@messaging.message_callback("telemetry")
@self.server.callbacks.action_callback("telemetry")
def get_telem_data(client, value, **kwargs):
self.update_table_data(client, value)