import json import os from dotenv import load_dotenv from flask import Flask from src.controllers.AuthController import AuthController from src.controllers.ClientController import ClientController from src.controllers.analyze_controller import AnalyzeController from src.controllers.message_controller import MessageController from src.controllers.mqtt_forwarder import create_forwarder from src.controllers.telemetryController import TelemetryController from src.models.AuthData import AuthData from src.services.mongo_service import MongoService import sys sys.stdout.reconfigure(line_buffering=True) load_dotenv() app = Flask(__name__) database_uri = os.getenv("MONGO_URI", "mongodb://localhost:27017") database_name = os.getenv("DATABASE_NAME", "default") local_broker_address = os.environ.get("LOCAL_BROKER_ADDRESS", "127.0.0.1") local_broker_port = int(os.environ.get("LOCAL_BROKER_PORT", 1883)) api_broker_address = os.environ.get("API_BROKER_ADDRESS", "127.0.0.1") api_broker_port = int(os.environ.get("API_BROKER_PORT", 1883)) auth_data = AuthData() database_service = MongoService(database_uri, database_name) auth_controller = AuthController(app, auth_data, "https://192.168.15.120:8000") client_controller = ClientController(app, auth_data, "https://192.168.15.120:8000") message_controller = MessageController(app, auth_data, "https://192.168.15.120:8000", database_service) telemetry_controller = TelemetryController(app, database_service) analyze_controller = AnalyzeController(app) def handle_login(data): local_broker, api_broker, forwarder = create_forwarder(data, local_broker_address, local_broker_port, api_broker_address, api_broker_port, database_service) client_id = data.get_client_id() api_broker.subscribe(f"/chat/{client_id}/message", message_controller.handle_message_received) forwarder.start(f"/customer/telemetry/#", f"/board-mate/{client_id}/telemetry", api_broker.publish) if __name__ == '__main__': auth_controller.set_on_login(handle_login) app.run(host="0.0.0.0", port=5000, debug=True, use_reloader=False, ssl_context=("./certs/server.crt", "./certs/server.key"))