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.token = None 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, 'token': self.handle_token_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(self.token, response)) def handle_test_request(self, data): # pylint: disable=unused-argument,no-self-use return 'OK' def handle_token_request(self, data): if self.token is None: self.token = data return {'token': self.token} def handle_solution_check_request(self, data): # pylint: disable=unused-argument return { 'solved': self.fsm.is_solved(), 'message': 'solved' if self.fsm.is_solved() else 'not solved' }