def run(self): self._logger.info("FabScanPi-Server " + str(__version__)) try: # inject "static" classed injector.provide(FSEventManagerInterface, FSEventManagerSingleton) injector.provide_instance(FSWebSocketServerInterface, FSWebSocketServer()) injector.provide_instance(ConfigInterface, Config(self.config_file, True)) injector.provide_instance(SettingsInterface, Settings(self.settings_file, True)) # inject "dynamic" classes self.config = injector.get_instance(ConfigInterface) FSScannerFactory.injectScannerType(self.config.scanner_type) # start server services websocket_server = injector.get_instance( FSWebSocketServerInterface) websocket_server.start() webserver = FSWebServer() webserver.start() FSScanner().start() FSEventManagerSingleton().instance.subscribe( FSEvents.COMMAND, self.on_server_command) while not self.exit: try: time.sleep(0.3) except KeyboardInterrupt: raise if self.upgrade: self._logger.info("Upgrading FabScanPi Server") self.update_server() self.restart = True if self.restart: self._logger.info("Restarting FabScanPi Server") self.restart_server() self.exit = True self._logger.info("FabScan Server Exit. Bye!") os._exit(1) except (KeyboardInterrupt, SystemExit): sys.exit(0)
def create_services(self): injector.provide(FSEventManagerInterface, FSEventManagerSingleton) injector.provide_instance(ConfigInterface, Config(self.config_file)) injector.provide_instance(SettingsInterface, Settings(self.settings_file)) # inject "dynamic" classes self.config = injector.get_instance(ConfigInterface) FSScannerFactory.injectScannerType(self.config.file.scanner_type) self.webserver = FSWebServer() self.webserver.start() self.scanner = FSScanner() self.scanner.start() self.eventManager = FSEventManagerSingleton() self.eventManager.instance.subscribe(FSEvents.COMMAND, self.on_server_command)