#pragma once #include "DirectCommunicationClient.hpp" #include "SimCore/Messages/SensorData.hpp" #include "SimCore/Messages/SensorTrack.hpp" #include "SimCore/Messages/SimTrack.hpp" #include "WHISPER/InternalUDPListener.hpp" #include #include #include #include #include #include #include #include #include #include #include namespace Entities { /** *@brief this class represents a template class example for senor Applications like Radar, Sonar, eg. */ class Sensor { public: Sensor( SimCore::Identifier OwnID, SimCore::Identifier OwnShipID, std::string Name, SimCore::SensorKinds SensorKind, std::string GroundTruthAddress, std::uint32_t GroundTruthPort, std::uint32_t ParentPort, std::string ParentIPAddress); void start(); void stop(); protected: SimCore::SensorData OwnData; virtual void specificSensorCalculations(std::unique_ptr track) = 0; std::shared_ptr OwnShipTrack_ = nullptr; const SimCore::Identifier OwnShipID; 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); }; }