#pragma once #include #include #include #include #include #include #include "config/SystemConfig.h" #include "config/IntersectionConfig.h" #include "network/WebSocketServer.h" #include "types/VehicleCommand.h" #include "types/MovingObject.h" class AirportBounds; class ControllableVehicles; class CollisionDetector; class TrafficLightDetector; class DataCollector; class MovingObject; struct CollisionRisk; struct TrafficLightSignal; namespace network { struct TimeoutWarningMessage; } class System { public: System(); virtual ~System(); bool initialize(); void start(); void stop(); static System* instance() { return instance_; } static void signalHandler(int signal); const SystemConfig& getSystemConfig() const { return system_config_; } const IntersectionConfig& getIntersectionConfig() const { return intersection_config_; } // 广播相关函数 virtual void broadcastTimeoutWarning(const network::TimeoutWarningMessage& warning); void broadcastPositionUpdate(const MovingObject& obj); void broadcastCollisionWarning(const CollisionRisk& risk); void broadcastVehicleCommand(const VehicleCommand& cmd); void broadcastTrafficLightStatus(const TrafficLightSignal& signal); private: static System* instance_; void processLoop(); std::atomic running_{false}; std::thread processThread_; std::thread ws_thread_; // 系统组件 std::unique_ptr airportBounds_; std::unique_ptr controllableVehicles_; std::unique_ptr collisionDetector_; std::unique_ptr trafficLightDetector_; std::unique_ptr dataCollector_; std::unique_ptr ws_server_; // 配置 SystemConfig system_config_; IntersectionConfig intersection_config_; // 记录车辆停止的时间 std::unordered_map vehicleStopTimes_; // 记录上一次有风险的可控车辆列表 std::unordered_set lastVehiclesWithRisk_; };