#pragma once #define LOGURU_WITH_STREAMS 1 #include #include #include "DirectCommunicationServer.hpp" #include "Entities/Movement.hpp" #include "Entities/SensorManager.hpp" #include "SimCore/Messages/SimTrack.hpp" #include "SimCore/Orientation.hpp" #include "SimCore/SafeMap.hpp" #include "SimCore/SimCore.hpp" #include "kubecontrol/PodController.hpp" #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace Entities { class Entity { public: Entity(const SimCore::Identifier OwnID, std::string EnttityName, WHISPER::SourceType OwnType, double RadarCrossSection, SimCore::Kind::EntityKind EntityKind, SimCore::Side::EntitySide EntitySide, std::string GroundTruthAddr, std::uint32_t GroundTruthPort, ushort CommandPort, ushort SensorPort, bool online); ~Entity(); /** * @brief starts the Entity APP */ void start(); /** * @brief stops the Entity */ void stop(); /** * @brief sets the current entity position */ void setPosition(SimCore::Position pos); /** * @brief sets the speed of the Entity * @param speed - double */ void setSpeed(double speed); /** * @brief set the course of the entity (heading, course over ground) in degree * @param course - double */ void setCourse(double course); /** * @brief sets the pitch (climb angle) in degree * @param pitch - double */ void setPitch( double pitch); protected: /** * @brief is the child worker function which is called on every circle */ virtual void childWorker() = 0; /** * @brief is function whick is called to stop the specific child class */ virtual void stopChild() = 0; protected: /// @brief shared_ptr of the own track std::shared_ptr OwnShipTrack = nullptr; /// @brief name of the entity (marking) std::string EntityName_; /// @brief Entity Kind var (is enum) SimCore::Kind::EntityKind EntityKind_; /// @brief Entity Side (is enum) SimCore::Side::EntitySide EntitySide_; /// @brief Radar cross section double RCS_; /// @brief port of the movement worker ushort MovemntWorkerPort_; /// @brief port which the sensor are connecting to ushort SensorPort_; /// @brief shared ptr of the Podcontroller std::shared_ptr PodController_; /// @brief unique ptr of the sensor manager std::unique_ptr SensorManager_; /// @brief broadcast server the own ship message is use to send std::shared_ptr BroadcastServer_; /// @brief address of the ground thruth (default = 239.0.0.1) std::string GroundTruthAddr_; /// @brief port of the ground thruth std::uint32_t GroundTruthPort_; /// @brief port on which commands are received ushort CommandPort_; private: /// @brief indicates if entity is startet in a kubernetes cluster bool online_; /// @brief vector of all startet threads std::vector threads_; /// std::atomic_bool stopMainLoop_ = false; void MainLoop(); void startMovementWorker(); std::atomic_bool MovementWorkerStarted_ = false; std::shared_ptr MovemtServer_ = nullptr; void handleMovement(); std::string MovementPodUUID_; std::shared_ptr CommandCommsServer_ = nullptr; void handleExternalComms(const std::string &msg); void startSensor(); // std::shared_ptr> SensorStore_; // std::shared_ptr>> Trackstore_; }; }