Beispiel #1
0
    def run_server(self):
        """ Run the web application. """
        self.setup_logging()
        self.setup_task_queue()
        self.setup_signals()
        self.setup_tornado()

        self._listening_port = self.config['port'].get(int)

        self._ip_address = get_ip_address()
        try:
            device_driver = plugin.get_driver(self.global_config['driver']
                                              .get())
            should_display_ip = (app.config['standalone'] and
                                 self._ip_address and
                                 plugin.DeviceFeatures.CAN_DISPLAY_TEXT in
                                 device_driver.features)
        except ConfigError:
            if self.config['mode'] not in ('scanner', 'full'):
                should_display_ip = False
            raise ConfigError(
                "You need to specify a value for `driver`.\n"
                "Either run `spread [gui]configure` or edit the configuration "
                "file.")

        if should_display_ip:
            # Every 30 seconds, see if there are devices attached and display
            # IP address and port on them, then disable the callback
            self._display_callback = PeriodicCallback(
                self.display_ip, 30*10**3)
            # Run once immediately
            self.display_ip()

        # Start task consumer
        self.consumer.start()

        # Start discovery listener
        if app.config['mode'] in ('processor', 'full'):
            discovery_listener = DiscoveryListener(self._listening_port)
            discovery_listener.start()

        # Spin up WSGI server
        self.application.listen(self._listening_port)

        try:
            IOLoop.instance().start()
        finally:
            # Shut everything down that is still running in the background
            self.consumer.shutdown()
            if app.config['mode'] in ('processor', 'full'):
                discovery_listener.stop()
Beispiel #2
0
def run_windows_service(config):
    import waitress
    import webbrowser
    from winservice import SysTrayIcon
    ws_server = WebSocketServer(port=5001)
    setup_app(config)
    setup_logging(config)
    setup_task_queue(config)
    setup_signals(ws_server)

    consumer = Consumer(task_queue)

    def on_quit(systray):
        consumer.shutdown()
        ws_server.stop()
        if app.config['mode'] in ('processor', 'full'):
            discovery_listener.stop()

    # Start task consumer
    consumer.start()
    # Start websocket server
    ws_server.start()

    listening_port = config['web']['port'].get(int)
    if app.config['mode'] in ('processor', 'full'):
        discovery_listener = DiscoveryListener(listening_port)
        discovery_listener.start()

    server_thread = Thread(target=waitress.serve, args=(app,),
                           kwargs=dict(port=listening_port, threads=16))
    server_thread.daemon = True
    server_thread.start()

    open_browser = lambda x: webbrowser.open_new_tab("http://127.0.0.1:{0}"
                                                     .format(listening_port))
    menu_options = (('Open in browser', None, open_browser),)

    SysTrayIcon(
        icon=os.path.join(os.path.dirname(sys.argv[0]), 'spreads.ico'),
        hover_text="Spreads Web Service",
        menu_options=menu_options,
        on_quit=on_quit,
        default_menu_index=1,
        on_click=open_browser)
Beispiel #3
0
def run_windows_service(config):
    import waitress
    import webbrowser
    from winservice import SysTrayIcon
    ws_server = WebSocketServer(port=5001)
    setup_app(config)
    setup_logging(config)
    setup_task_queue(config)
    setup_signals(ws_server)

    consumer = Consumer(task_queue)

    def on_quit(systray):
        consumer.shutdown()
        ws_server.stop()
        if app.config['mode'] in ('processor', 'full'):
            discovery_listener.stop()

    # Start task consumer
    consumer.start()
    # Start websocket server
    ws_server.start()

    listening_port = config['web']['port'].get(int)
    if app.config['mode'] in ('processor', 'full'):
        discovery_listener = DiscoveryListener(listening_port)
        discovery_listener.start()

    server_thread = Thread(target=waitress.serve,
                           args=(app, ),
                           kwargs=dict(port=listening_port, threads=16))
    server_thread.daemon = True
    server_thread.start()

    open_browser = lambda x: webbrowser.open_new_tab("http://127.0.0.1:{0}".
                                                     format(listening_port))
    menu_options = (('Open in browser', None, open_browser), )

    SysTrayIcon(icon=os.path.join(os.path.dirname(sys.argv[0]), 'spreads.ico'),
                hover_text="Spreads Web Service",
                menu_options=menu_options,
                on_quit=on_quit,
                default_menu_index=1,
                on_click=open_browser)
Beispiel #4
0
def run_server(config):
    listening_port = config['web']['port'].get(int)
    ws_server = WebSocketServer(port=listening_port+1)
    setup_app(config)
    setup_logging(config)
    setup_task_queue(config)
    setup_signals(ws_server)

    consumer = Consumer(task_queue)

    ip_address = get_ip_address()
    if (app.config['standalone'] and ip_address
            and config['driver'].get() == 'chdkcamera'):
        # Display the address of the web interface on the camera displays
        try:
            for cam in plugin.get_devices(config):
                cam.show_textbox(
                    "\n    You can now access the web interface at:"
                    "\n\n\n         http://{0}:{1}"
                    .format(ip_address, listening_port))
        except plugin.DeviceException:
            logger.warn("No devices could be found at startup.")

    # Start task consumer
    consumer.start()
    # Start websocket server
    ws_server.start()
    if app.config['mode'] in ('processor', 'full'):
        discovery_listener = DiscoveryListener(listening_port)
        discovery_listener.start()

    try:
        import waitress
        waitress.serve(app, port=listening_port)
    finally:
        consumer.shutdown()
        ws_server.stop()
        if app.config['mode'] in ('processor', 'full'):
            discovery_listener.stop()
Beispiel #5
0
    def run_server(self):
        """ Run the web application. """
        self.setup_logging()
        self.setup_task_queue()
        self.setup_signals()
        self.setup_tornado()

        self._listening_port = self.config['port'].get(int)

        self._ip_address = get_ip_address()
        try:
            device_driver = plugin.get_driver(self.global_config['driver']
                                              .get())
            should_display_ip = (app.config['standalone'] and self._ip_address
                                 and plugin.DeviceFeatures.CAN_DISPLAY_TEXT in
                                 device_driver.features)
        except ConfigError:
            if self.config['mode'] not in ('scanner', 'full'):
                should_display_ip = False
            raise ConfigError(
                "You need to specify a value for `driver`.\n"
                "Either run `spread [gui]configure` or edit the configuration "
                "file.")

        if should_display_ip:
            # Every 30 seconds, see if there are devices attached and display
            # IP address and port on them, then disable the callback
            self._display_callback = PeriodicCallback(
                self.display_ip, 30*10**3)
            # Run once immediately
            self.display_ip()

        # Start task consumer
        self.consumer.start()

        # Start discovery listener
        if app.config['mode'] in ('processor', 'full'):
            discovery_listener = DiscoveryListener(self._listening_port)
            discovery_listener.start()

        # Spin up WSGI server
        self.application.listen(self._listening_port)

        try:
            IOLoop.instance().start()
        finally:
            # Shut everything down that is still running in the background
            self.consumer.shutdown()
            if app.config['mode'] in ('processor', 'full'):
                discovery_listener.stop()
Beispiel #6
0
def run_server(config):
    listening_port = config['web']['port'].get(int)
    ws_server = WebSocketServer(port=listening_port + 1)
    setup_app(config)
    setup_logging(config)
    setup_task_queue(config)
    setup_signals(ws_server)

    consumer = Consumer(task_queue)

    ip_address = get_ip_address()
    if (app.config['standalone'] and ip_address
            and config['driver'].get() == 'chdkcamera'):
        # Display the address of the web interface on the camera displays
        try:
            for cam in plugin.get_devices(config):
                cam.show_textbox(
                    "\n    You can now access the web interface at:"
                    "\n\n\n         http://{0}:{1}".format(
                        ip_address, listening_port))
        except plugin.DeviceException:
            logger.warn("No devices could be found at startup.")

    # Start task consumer
    consumer.start()
    # Start websocket server
    ws_server.start()
    if app.config['mode'] in ('processor', 'full'):
        discovery_listener = DiscoveryListener(listening_port)
        discovery_listener.start()

    try:
        import waitress
        waitress.serve(app, port=listening_port)
    finally:
        consumer.shutdown()
        ws_server.stop()
        if app.config['mode'] in ('processor', 'full'):
            discovery_listener.stop()