class Server(NetworkServer): def __init__(self, test_mode: bool) -> None: super().__init__() self.test_mode = test_mode handlers = [(r'/socket', RocketSocket, dict(server=self))] self.webserver = WebServer(port=8080, handlers=handlers) self.source: Inputs = InputTest() if test_mode else InputSerial() self.recorders: List[Recorder] = [LogRecorder(), CSVRecorder()] def on_message(self, data: str) -> None: try: action = json.loads(data) if action.get('action') == 'recorder': for recorder in [ recorder for recorder in self.recorders if recorder.name() == action.get('recorder') ]: recorder.set_enabled(action.get('value', False)) except Exception as error: logging.error(f'Error found {error}') def __recorders_to_dict(self) -> Dict[str, bool]: result: Dict[str, bool] = {} for recorder in self.recorders: result[recorder.name()] = recorder.enabled return result async def run_main(self) -> None: rocket_data = RocketData() for data in self.source.get_data(): try: rocket_data.update(datastream=data) rocket_data.recorders = self.__recorders_to_dict() for recorder in (recorder for recorder in self.recorders if recorder.enabled): recorder.new_data(rocket_data) for socket in self.sockets: try: socket.write_message(rocket_data.to_json()) except WebSocketClosedError as error: logging.error(f'Connection closed {error}') self.remove_socket(socket) except Exception as error: logging.error('Could not parse ' + str(error)) await asyncio.sleep(0.001) def run(self) -> None: self.webserver.run(callback=self.run_main)
def main(): ws = WebServer() ws.run()
webbox_dir = os.path.expanduser('~'+os.sep+".webbox") setup = WebBoxSetup() setup.setup(webbox_dir, "webbox.json.default", kbname) # directory, default config, kbname # load configuration into 'config' variable webbox_config = webbox_dir + os.sep + "webbox.json" conf_fh = open(webbox_config, "r") config = json.loads(conf_fh.read()) conf_fh.close() # add the webbox path to the config (at runtime only) config['webbox']['webbox_dir'] = webbox_dir # add additional binary paths to the PATH for bindir in config['server']['bindirs']: os.environ['PATH'] = os.path.join(os.path.dirname(__file__), bindir) + ":" + os.environ['PATH'] # show debug messages in log file log_handler = logging.FileHandler(config['server']['log'], "a") log_handler.setLevel(logging.DEBUG) logger = logging.getLogger() # root logger logger.addHandler(log_handler) logger.debug("Logger initialised") logger.setLevel(logging.DEBUG) wb = WebBox(config['webbox']) server = WebServer(config['server'], os.path.dirname(__file__), wb) server.run()
def main(): wb = WebServer() wb.run()
import asyncio from asyncbot import bot from webserver import WebServer from data import Point server = WebServer() if __name__ == '__main__': # Create database if not exists Point.create_table() loop = asyncio.get_event_loop() loop.create_task(server.run()) loop.create_task(bot.async_polling()) loop.run_forever()
##Create object to manage connection to and communications with MQTT server mqttServiceProvider = MQTTServiceProvider(MQTT_CLIENT_NAME, MQTT_SERVER_ADDRESS) ##Has subscription/publish methods. #Create object to manage list of connected devices rhizoDeviceManager = RhizoDeviceManager() #Listens for usb-connect/disconnect events and creates/destroys devices in response #Generates 'device-added' and 'device-removed' events #Devices that are created manage communication with hardware (e.g. over SerialConnection for a RhizoDevice). #They create and update the state of Components. #A Component represents a single sensor, actuator or camera. #Components have methods for getting metadata and state, and setting state. #IoTDeviceManager creates an IoT interface for every component provided by the devices iotInterfaceManager = IoTInterfaceManager(mqttServiceProvider) #Listens to component-added and component-removed events to update list #An IoTInterface watches a set of internal events we want to be broadcast over MQTT #subscribes to events and publishes to mqttclient. cameraController = CameraController() #Create object to loop over USB ports and watch for new connection/disconnections usbPortWatcher = USBPortWatcher() #It generates 'usb-connect' and 'usb-disconnect' events. webserver = WebServer(WEBSERVER_NAME, cameraController.getFrame) webserver.run() #takes over the main thread