CollisionAvoidance/include/core/System.h

76 lines
2.2 KiB
C++

#pragma once
#include <memory>
#include <thread>
#include <atomic>
#include <unordered_map>
#include <unordered_set>
#include <chrono>
#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<bool> running_{false};
std::thread processThread_;
std::thread ws_thread_;
// 系统组件
std::unique_ptr<AirportBounds> airportBounds_;
std::unique_ptr<ControllableVehicles> controllableVehicles_;
std::unique_ptr<CollisionDetector> collisionDetector_;
std::unique_ptr<TrafficLightDetector> trafficLightDetector_;
std::unique_ptr<DataCollector> dataCollector_;
std::unique_ptr<network::WebSocketServer> ws_server_;
// 配置
SystemConfig system_config_;
IntersectionConfig intersection_config_;
// 记录车辆停止的时间
std::unordered_map<std::string, std::chrono::system_clock::time_point> vehicleStopTimes_;
// 记录上一次有风险的可控车辆列表
std::unordered_set<std::string> lastVehiclesWithRisk_;
};