X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=simgear%2Fhla%2FHLAFederate.hxx;h=ab5fa57e12230c0cc6c2e94ced189ac8a10d15fc;hb=201cb61f842ef50a19438e3872ba22e588fa1afc;hp=2326a385d760fcb9cf76c383cb865e79833597d3;hpb=42cc699263d23b4bb4a46016cec7526e48fd0589;p=simgear.git diff --git a/simgear/hla/HLAFederate.hxx b/simgear/hla/HLAFederate.hxx index 2326a385..ab5fa57e 100644 --- a/simgear/hla/HLAFederate.hxx +++ b/simgear/hla/HLAFederate.hxx @@ -44,6 +44,7 @@ public: /// The rti version backend to connect Version getVersion() const; bool setVersion(HLAFederate::Version version); + bool setVersion(const std::string& version); /// The rti backends connect arguments, depends on the version const std::list& getConnectArguments() const; @@ -161,31 +162,6 @@ public: /// a pending time advance is granted. bool processMessages(); - /// Legacy tick call - deprecated - bool tick(const double& minimum, const double& maximum); - - class ObjectModelFactory { - public: - virtual ~ObjectModelFactory() - { } - - virtual HLAObjectClass* createObjectClass(const std::string& name, HLAFederate& federate) - { return federate.createObjectClass(name); } - virtual bool subscribeObjectClass(const std::string& objectClassName, const std::string& sharing) - { return sharing.find("Subscribe") != std::string::npos; } - virtual bool publishObjectClass(const std::string& objectClassName, const std::string& sharing) - { return sharing.find("Publish") != std::string::npos; } - virtual bool subscribeAttribute(const std::string& objectClassName, const std::string& attributeName, const std::string& sharing) - { return sharing.find("Subscribe") != std::string::npos; } - virtual bool publishAttribute(const std::string& objectClassName, const std::string& attributeName, const std::string& sharing) - { return sharing.find("Publish") != std::string::npos; } - - }; - - /// Read an omt xml file - deprecated - bool readObjectModelTemplate(const std::string& objectModel, - ObjectModelFactory& objectModelFactory); - /// Read an rti1.3 omt xml file bool readRTI13ObjectModelTemplate(const std::string& objectModel); /// Read an rti1516 omt xml file @@ -193,20 +169,45 @@ public: /// Read an rti1516e omt xml file bool readRTI1516EObjectModelTemplate(const std::string& objectModel); + /// Is called past a successful join to populate the rti classes + bool resolveObjectModel(); + + /// Access data types + const HLADataType* getDataType(const std::string& name) const; + // virtual const HLADataType* createDataType(const std::string& name); + bool insertDataType(const std::string& name, const SGSharedPtr& dataType); + void recomputeDataTypeAlignment(); + + /// Get the interaction class of a given name + HLAInteractionClass* getInteractionClass(const std::string& name); + const HLAInteractionClass* getInteractionClass(const std::string& name) const; + /// Default create function. Creates a default interaction class + virtual HLAInteractionClass* createInteractionClass(const std::string& name); + /// Get the object class of a given name HLAObjectClass* getObjectClass(const std::string& name); const HLAObjectClass* getObjectClass(const std::string& name) const; /// Default create function. Creates a default object class virtual HLAObjectClass* createObjectClass(const std::string& name); - /// Get the interaction class of a given name - HLAInteractionClass* getInteractionClass(const std::string& name); - const HLAInteractionClass* getInteractionClass(const std::string& name) const; + /// Get the object instance of a given name + HLAObjectInstance* getObjectInstance(const std::string& name); + const HLAObjectInstance* getObjectInstance(const std::string& name) const; + virtual HLAObjectInstance* createObjectInstance(HLAObjectClass* objectClass, const std::string& name); /// Tells the main exec loop to continue or not. void setDone(bool done); bool getDone() const; + /// The user overridable slot that is called to set up an object model + /// By default, depending on the set up rti version, the apropriate + /// bool read{RTI13,RTI1516,RTI1516E}ObjectModelTemplate(const std::string& objectModel); + /// method is called. + /// Note that the RTI13 files do not contain any information about the data types. + /// A user needs to set up the data types and assign them to the object classes/ + /// interaction classes theirselves. + /// Past reading the object model, it is still possible to change the subscription/publication + /// types without introducing traffic on the backend rti. virtual bool readObjectModel(); virtual bool subscribe(); @@ -222,6 +223,16 @@ private: HLAFederate(const HLAFederate&); HLAFederate& operator=(const HLAFederate&); + void _clearRTI(); + + /// Internal helpers for interaction classes + bool _insertInteractionClass(HLAInteractionClass* interactionClass); + /// Internal helpers for object classes + bool _insertObjectClass(HLAObjectClass* objectClass); + /// Internal helpers for object instances + bool _insertObjectInstance(HLAObjectInstance* objectInstance); + void _eraseObjectInstance(const std::string& name); + /// The underlying interface to the rti implementation SGSharedPtr _rtiFederate; @@ -256,14 +267,27 @@ private: /// If true the exec method returns. bool _done; - typedef std::map > ObjectClassMap; - ObjectClassMap _objectClassMap; + /// The Data Types by name + typedef std::map > DataTypeMap; + DataTypeMap _dataTypeMap; + /// The Interaction Classes by name typedef std::map > InteractionClassMap; InteractionClassMap _interactionClassMap; + /// The Object Classes by name + typedef std::map > ObjectClassMap; + ObjectClassMap _objectClassMap; + + /// The Object Instances by name + typedef std::map > ObjectInstanceMap; + ObjectInstanceMap _objectInstanceMap; + /// The Object Instances by name, the ones that have an explicit given name, may be not yet registered + // ObjectInstanceMap _explicitNamedObjectInstanceMap; + friend class HLAInteractionClass; friend class HLAObjectClass; + friend class HLAObjectInstance; }; } // namespace simgear