class AxonController(object):

    def __init__(self):
        self.axon_port = conf.AXON_PORT
        self.service = AxonService()
        self.protocol_config = self.service.RPYC_PROTOCOL_CONFIG
        self.logger = logging.getLogger(__name__)
        self.logger.setLevel(logging.WARN)
        self.axon_service = ThreadPoolServer(
            self.service,
            port=self.axon_port,
            reuse_addr=True,
            protocol_config=self.protocol_config,
            logger=self.logger, nbThreads=50)

    def start(self):
        try:
            self.service.exposed_traffic.start_servers()
            self.service.exposed_traffic.start_clients()
        except Exception:
            self.logger.exception("Ooops!! Exception during Traffic Start")
        self.axon_service.start()

    def stop(self):
        try:
            self.service.exposed_traffic.stop_clients()
            self.service.exposed_traffic.stop_servers()
        except Exception:
            self.logger.exception("Ooops!! Exception during Traffic Stop")
        self.axon_service.close()