X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=simgear%2Fhla%2FHLAFederate.cxx;h=75465af470ddf0d0fc96da1231c67c0e47db60f6;hb=2815688c7ebf2be0dcf3cc0d271bb694dafa8ae7;hp=1b99ff28c3e4b29e591d74485915297212345ee4;hpb=27219e0f5811d46dfcf0b7facfa36d1b5c9101a4;p=simgear.git diff --git a/simgear/hla/HLAFederate.cxx b/simgear/hla/HLAFederate.cxx index 1b99ff28..75465af4 100644 --- a/simgear/hla/HLAFederate.cxx +++ b/simgear/hla/HLAFederate.cxx @@ -15,6 +15,12 @@ // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. // +#ifdef HAVE_CONFIG_H +# include +#endif + +#include + #include "HLAFederate.hxx" #include @@ -72,6 +78,22 @@ HLAFederate::setVersion(HLAFederate::Version version) return true; } +bool +HLAFederate::setVersion(const std::string& version) +{ + if (version == "RTI13") + return setVersion(RTI13); + else if (version == "RTI1516") + return setVersion(RTI1516); + else if (version == "RTI1516E") + return setVersion(RTI1516E); + else { + /// at some time think about routing these down to the factory + SG_LOG(SG_NETWORK, SG_ALERT, "HLA: Unknown version string in HLAFederate::setVersion!"); + return false; + } +} + const std::list& HLAFederate::getConnectArguments() const { @@ -732,87 +754,6 @@ HLAFederate::processMessages() return true; } -bool -HLAFederate::tick(const double& minimum, const double& maximum) -{ - if (!_rtiFederate.valid()) { - SG_LOG(SG_NETWORK, SG_WARN, "HLA: Accessing unconnected federate!"); - return false; - } - return _rtiFederate->processMessages(minimum, maximum); -} - -bool -HLAFederate::readObjectModelTemplate(const std::string& objectModel, - HLAFederate::ObjectModelFactory& objectModelFactory) -{ - // The XML version of the federate object model. - // This one covers the generic attributes, parameters and data types. - HLAOMTXmlVisitor omtXmlVisitor; - try { - readXML(objectModel, omtXmlVisitor); - } catch (const sg_throwable& e) { - SG_LOG(SG_IO, SG_ALERT, "Could not open HLA XML object model file: " - << e.getMessage()); - return false; - } catch (...) { - SG_LOG(SG_IO, SG_ALERT, "Could not open HLA XML object model file"); - return false; - } - - omtXmlVisitor.setDataTypesToFederate(*this); - - unsigned numObjectClasses = omtXmlVisitor.getNumObjectClasses(); - for (unsigned i = 0; i < numObjectClasses; ++i) { - const HLAOMTXmlVisitor::ObjectClass* objectClass = omtXmlVisitor.getObjectClass(i); - std::string objectClassName = objectClass->getName(); - - SGSharedPtr hlaObjectClass = objectModelFactory.createObjectClass(objectClassName, *this); - if (!hlaObjectClass.valid()) { - SG_LOG(SG_IO, SG_INFO, "Ignoring object class \"" << objectClassName << "\"."); - continue; - } - - bool publish = objectModelFactory.publishObjectClass(objectClassName, objectClass->getSharing()); - bool subscribe = objectModelFactory.subscribeObjectClass(objectClassName, objectClass->getSharing()); - - // process the attributes - for (unsigned j = 0; j < objectClass->getNumAttributes(); ++j) { - const simgear::HLAOMTXmlVisitor::Attribute* attribute; - attribute = objectClass->getAttribute(j); - - std::string attributeName = attribute->getName(); - unsigned index = hlaObjectClass->addAttribute(attributeName); - - if (index == ~0u) { - SG_LOG(SG_IO, SG_WARN, "RTI does not know the \"" << attributeName << "\" attribute!"); - continue; - } - - // the attributes datatype - SGSharedPtr dataType = getDataType(attribute->getDataType()); - if (!dataType.valid()) { - SG_LOG(SG_IO, SG_WARN, "Could not find data type for attribute \"" - << attributeName << "\" in object class \"" << objectClassName << "\"!"); - } - hlaObjectClass->setAttributeDataType(index, dataType); - hlaObjectClass->setAttributeUpdateType(index, attribute->getUpdateType()); - if (subscribe && objectModelFactory.subscribeAttribute(objectClassName, attributeName, attribute->_sharing)) - hlaObjectClass->setAttributeSubscriptionType(index, attribute->getSubscriptionType()); - if (publish && objectModelFactory.publishAttribute(objectClassName, attributeName, attribute->_sharing)) - hlaObjectClass->setAttributePublicationType(index, attribute->getPublicationType()); - } - - if (publish) - hlaObjectClass->publish(); - if (subscribe) - hlaObjectClass->subscribe(); - - } - - return resolveObjectModel(); -} - bool HLAFederate::readRTI13ObjectModelTemplate(const std::string& objectModel) {