#pragma once #include "DirectCommunicationClient.hpp" #include "SimCore/Messages/SimTrack.hpp" #include "WHISPER/InternalUDPListener.hpp" #include #include #include #include #include #include #include #include #include #include #include namespace Entities { class Sensor { public: Sensor( SimCore::Identifier OwnID, SimCore::Identifier OwnShipID, SimCore::SensorKinds SensorKind, std::string GroundTruthAddress, std::uint32_t GroundTruthPort, std::uint32_t ParentPort, std::string ParentIPAddress); void start(); void stop(); protected: virtual void specificSensorCalculations(std::unique_ptr track) = 0; std::shared_ptr OwnShipTrack_ = nullptr; const SimCore::Identifier OwnID_; const SimCore::Identifier OwnShipID; SimCore::SensorKinds SensorKind_; std::shared_ptr>> recognisedTracks_ = nullptr; private: std::uint32_t GroundTruthPort_; std::string GroundTruthAddr_; std::uint32_t ParentPort_; std::string ParentIPAddress_; std::unique_ptr GroundTruthUDPListener_; std::unique_ptr client_; std::thread UpdateOwnShipThread_; std::atomic_bool stopOwnShipUpdater_ = false; void handleGroundThruthMessage(std::string msg); void updateOwnShipFunction(); void handlServerMessages(std::string msg); void HandleOrders(WHISPER::Message WHmsg); void setupOwnShip(std::shared_ptr ownShipTracK); }; }