diff --git a/lib/tfw/networking/server/controller_responder.py b/lib/tfw/networking/server/controller_responder.py new file mode 100644 index 0000000..32567d7 --- /dev/null +++ b/lib/tfw/networking/server/controller_responder.py @@ -0,0 +1,27 @@ +from tfw.networking.controller_connector import ControllerConnector +from tfw.networking.serialization import deserialize_all, serialize_all + + +class ControllerResponder: + def __init__(self, fsm): + self.fsm = fsm + self.controller_connector = ControllerConnector() + self.controller_connector.register_callback(self.handle_controller_request) + self.controller_request_handlers = { + 'solution_check': self.handle_solution_check_request, + 'test': self.handle_test_request + } + + def handle_controller_request(self, stream, msg_parts): + key, data = deserialize_all(*msg_parts) + response = self.controller_request_handlers[key](data) + stream.send_multipart(serialize_all(key, response)) + + def handle_test_request(self, data): + return 'OK' + + def handle_solution_check_request(self, data): + return { + 'solved': self.fsm.is_solved(), + 'message': 'solved' if self.fsm.is_solved() else 'not solved' + } diff --git a/lib/tfw/networking/server/tfw_server.py b/lib/tfw/networking/server/tfw_server.py index b8972d7..0129686 100644 --- a/lib/tfw/networking/server/tfw_server.py +++ b/lib/tfw/networking/server/tfw_server.py @@ -1,7 +1,6 @@ from tornado.web import Application -from tfw.networking.controller_connector import ControllerConnector -from tfw.networking.serialization import deserialize_all, serialize_all +from tfw.networking.server.controller_responder import ControllerResponder from tfw.networking.server.zmq_websocket_handler import FSMManagingSocketHandler @@ -11,30 +10,11 @@ class TFWServer: self.application = Application( [(r'/ws', FSMManagingSocketHandler, {'fsm': self.fsm})] ) - self.controller_connector = ControllerConnector() - self.controller_connector.register_callback(self.handle_controller_request) - self.controller_request_handlers = { - 'solution_check': self.handle_solution_check_request, - 'test': self.handle_test_request - } + self.controller_responder = ControllerResponder(self.fsm) @property def fsm(self): return self._fsm - def handle_controller_request(self, stream, msg_parts): - key, data = deserialize_all(*msg_parts) - response = self.controller_request_handlers[key](data) - stream.send_multipart(serialize_all(key, response)) - - def handle_test_request(self, data): - return 'OK' - - def handle_solution_check_request(self, data): - return { - 'solved': self.fsm.is_solved(), - 'message': 'solved' if self.fsm.is_solved() else 'not solved' - } - def listen(self, port): self.application.listen(port)