76 lines
2.2 KiB
C++
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_;
|
|
};
|