Aggiunti WebSockets al frontend
This commit is contained in:
@@ -9,6 +9,7 @@ import threading
|
||||
import time
|
||||
import logging
|
||||
from logging.handlers import RotatingFileHandler
|
||||
from flask_socketio import SocketIO, emit
|
||||
|
||||
# --- CONFIGURAZIONE LOGGING ---
|
||||
logging.basicConfig(
|
||||
@@ -99,6 +100,7 @@ def get_call(id, proto="DMR"):
|
||||
|
||||
def save_cache(data):
|
||||
with open(CACHE_FILE, 'w') as f: json.dump(data, f)
|
||||
socketio.emit('dati_aggiornati')
|
||||
|
||||
def save_to_sqlite(client_id, data, protocol="DMR"):
|
||||
conn = sqlite3.connect(DB_PATH)
|
||||
@@ -107,8 +109,10 @@ def save_to_sqlite(client_id, data, protocol="DMR"):
|
||||
(client_id, protocol, str(data.get('source_id', '---')), str(data.get('destination_id', '---')), data.get('slot', 0), round(data.get('duration', 0), 1), round(data.get('ber', 0), 2)))
|
||||
conn.commit()
|
||||
conn.close()
|
||||
socketio.emit('dati_aggiornati')
|
||||
|
||||
app = Flask(__name__)
|
||||
socketio = SocketIO(app, cors_allowed_origins="*", async_mode='threading')
|
||||
app.secret_key = 'ari_fvg_secret_ultra_secure'
|
||||
client_states = {}
|
||||
device_configs = {}
|
||||
@@ -169,6 +173,7 @@ def on_message(client, userdata, msg):
|
||||
|
||||
elif parts[0] == 'servizi':
|
||||
client_states[cid] = payload
|
||||
socketio.emit('dati_aggiornati') # <--- WEBSOCKET
|
||||
if payload.upper() not in ['OFF', 'OFFLINE', '']:
|
||||
tel = client_telemetry.get(cid, {})
|
||||
if isinstance(tel, dict) and '🔄' in str(tel.get('ts1', '')):
|
||||
@@ -187,9 +192,9 @@ def on_message(client, userdata, msg):
|
||||
"files": data.get("files", data.get("config_files", [])),
|
||||
"profiles": data.get("profiles", {"A": "PROFILO A", "B": "PROFILO B"})
|
||||
}
|
||||
socketio.emit('dati_aggiornati') # <--- WEBSOCKET
|
||||
except Exception as e: logger.error(f"Errore parsing health: {e}")
|
||||
|
||||
# NUOVO BLOCCO: Intercettazione configurazione DMRGateway
|
||||
elif len(parts) >= 4 and parts[0] == 'data' and parts[2].lower() == 'dmrgateway' and (parts[3].upper().startswith('NETWORK') or parts[3].upper().startswith('DMR NETWORK')):
|
||||
try:
|
||||
cid = parts[1].lower()
|
||||
@@ -211,6 +216,7 @@ def on_message(client, userdata, msg):
|
||||
|
||||
if is_ts1: network_mapping[cid]["ts1"] = net_name
|
||||
if is_ts2: network_mapping[cid]["ts2"] = net_name
|
||||
socketio.emit('dati_aggiornati') # <--- WEBSOCKET
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Errore parsing DMRGateway per {cid}: {e}")
|
||||
@@ -259,6 +265,7 @@ def on_message(client, userdata, msg):
|
||||
active_calls[cid][sk] = {'src': src, 'dst': dst}
|
||||
client_telemetry[cid]["alt"] = ""
|
||||
client_telemetry[cid][sk] = f"🎙️ {src} ➔ TG {dst}"
|
||||
socketio.emit('dati_aggiornati') # <--- WEBSOCKET
|
||||
elif act in ['end', 'lost']:
|
||||
info = active_calls[cid].get(sk, {'src': '---', 'dst': '---'})
|
||||
d['source_id'], d['destination_id'] = info['src'], info['dst']
|
||||
@@ -288,6 +295,7 @@ def on_message(client, userdata, msg):
|
||||
|
||||
active_calls[cid][k] = {'src': src, 'dst': target}
|
||||
client_telemetry[cid].update({"ts1":"","ts2":"","alt": f"{ico} {name}: {src} ➔ {target}"})
|
||||
socketio.emit('dati_aggiornati') # <--- WEBSOCKET
|
||||
|
||||
elif act in ['end', 'lost']:
|
||||
info = active_calls[cid].get(k, {'src': '---', 'dst': '---'})
|
||||
@@ -619,4 +627,4 @@ def serve_icon():
|
||||
|
||||
if __name__ == '__main__':
|
||||
threading.Thread(target=auto_update_ids, daemon=True).start()
|
||||
app.run(host='0.0.0.0', port=5000)
|
||||
socketio.run(app, host='0.0.0.0', port=9000)
|
||||
|
||||
Reference in New Issue
Block a user