Example #1
0
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()
Example #3
0
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()

Example #4
0
def main():
    wb = WebServer()
    wb.run()
Example #5
0
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()
Example #6
0
##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
Example #7
0
def main():
    ws = WebServer()
    ws.run()