Skip to content
instance.py 3.33 KiB
Newer Older
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

"""Web client"""

# System modules

# Third-party modules
from flask import request
from flask_socketio import SocketIO

# Custom modules
Davide Ricci's avatar
Davide Ricci committed
from web.server import routes, stream
def enable(app):

    app.template_folder = "./web/pages"
    app.static_folder = "./web/static"

    app.register_blueprint(routes.web, url_prefix='/web')

Davide Ricci's avatar
Davide Ricci committed
    base_url = {"ext_base_url": "http://fork.orsa.unige.net:5533", # what form-crud needs
                "int_base_url": "http://10.185.119.108:5533"} # what instance needs
#               "int_base_url": "http://130.251.19.108:5533"} # from outside
vertighel's avatar
vertighel committed

Davide Ricci's avatar
Davide Ricci committed
    @app.context_processor
    def inject_variables():
Davide Ricci's avatar
Davide Ricci committed

    socketio = SocketIO(app,
                        path="/web/socket",
                        async_mode='threading',
    connected_clients = {}
Davide Ricci's avatar
Davide Ricci committed
        base_url["int_base_url"]+"/all/dome",
        base_url["int_base_url"]+"/all/telescope",
        base_url["int_base_url"]+"/all/camera?wait=0.2",
        base_url["int_base_url"]+"/api/sequencer/run",
        base_url["int_base_url"]+"/api/webcam/snapshot",
        base_url["int_base_url"]+"new_lines",
Davide Ricci's avatar
Davide Ricci committed

    @socketio.on('connect')
    def handle_connect():
        print("sending initial")
Davide Ricci's avatar
Davide Ricci committed
        stream.status.initial(socketio, ws_names)

        client_id = request.sid
        client_ip = request.remote_addr
        connected_clients[client_id] = client_ip
        uniques = len(set(connected_clients.values()))

        print(f"Connected:    {client_id} - IP: {client_ip}. Tabs: {len(connected_clients)}, IPs: {uniques}")

Davide Ricci's avatar
Davide Ricci committed

    @socketio.on('disconnect')
    def handle_disconnect():
        client_id = request.sid
        client_ip = request.remote_addr

        if client_id in connected_clients:
            del connected_clients[client_id]
Davide Ricci's avatar
Davide Ricci committed

        uniques = len(set(connected_clients.values()))
        print(f"Disconnected: {client_id} - IP: {client_ip}. Tabs: {len(connected_clients)}, IPs: {uniques}")

    @socketio.on_error()
Davide Ricci's avatar
Davide Ricci committed
    def error_handler(e):
        print(f'ERROR: {e}')
    # socketio.start_background_task(send_binary, socketio=socketio)

    # socketio.start_background_task(stream.send_timestamp, socketio=socketio)

    socketio.start_background_task(stream.send_status, socketio=socketio,
                                   url=base_url["int_base_url"]+"/all/dome")
    socketio.start_background_task(stream.send_status, socketio=socketio,
                                   url=base_url["int_base_url"]+"/all/telescope")
Davide Ricci's avatar
Davide Ricci committed
    socketio.start_background_task(stream.send_status, socketio=socketio,
                                   url=base_url["int_base_url"]+"/all/camera?wait=0.2")
    socketio.start_background_task(stream.send_status, socketio=socketio,
                                   url=base_url["int_base_url"]+"/api/sequencer/run")
    socketio.start_background_task(stream.send_webcam, socketio=socketio,
                                    url=base_url["int_base_url"]+"/api/webcam/snapshot")
Davide Ricci's avatar
Davide Ricci committed
    socketio.start_background_task(stream.send_status, socketio=socketio,
                                    url=base_url["int_base_url"]+"/api/environment/status", sleep=40)
Davide Ricci's avatar
Davide Ricci committed
    socketio.start_background_task(stream.tail_f, socketio=socketio)

    return socketio