X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=simgear%2Fhla%2FHLAFederate.cxx;h=4a9d93d4626ccce9c3489b538aceba91fbc908e2;hb=124db3da8e7243d3aaea5a5cad379b3a682d5fe0;hp=003fd23ad2224fcac568318cdddf5155914d2a63;hpb=5708ec5a89ff21868068a67815cd2771b96c11c4;p=simgear.git diff --git a/simgear/hla/HLAFederate.cxx b/simgear/hla/HLAFederate.cxx index 003fd23a..4a9d93d4 100644 --- a/simgear/hla/HLAFederate.cxx +++ b/simgear/hla/HLAFederate.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2009 - 2011 Mathias Froehlich - Mathias.Froehlich@web.de +// Copyright (C) 2009 - 2012 Mathias Froehlich - Mathias.Froehlich@web.de // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Library General Public @@ -17,8 +17,11 @@ #include "HLAFederate.hxx" -#include "RTI13Federate.hxx" +#include "simgear/debug/logstream.hxx" + #include "RTIFederate.hxx" +#include "RTIFederateFactoryRegistry.hxx" +#include "RTI13FederateFactory.hxx" #include "RTIInteractionClass.hxx" #include "RTIObjectClass.hxx" #include "HLADataElement.hxx" @@ -35,6 +38,8 @@ HLAFederate::HLAFederate() : _timeConstrainedByLocalClock(false), _done(false) { + // For now instantiate the current only available factory here explicitly + RTI13FederateFactory::instance(); } HLAFederate::~HLAFederate() @@ -159,28 +164,9 @@ HLAFederate::setFederateName(const std::string& federateName) bool HLAFederate::connect(Version version, const std::list& stringList) { - if (_rtiFederate.valid()) { - SG_LOG(SG_NETWORK, SG_WARN, "HLA: Trying to connect to already connected federate!"); - return false; - } - switch (version) { - case RTI13: - _rtiFederate = new RTI13Federate(stringList); - _version = version; - _connectArguments = stringList; - break; - case RTI1516: - SG_LOG(SG_IO, SG_ALERT, "HLA version RTI1516 not yet(!?) supported."); - // _rtiFederate = new RTI1516Federate(stringList); - break; - case RTI1516E: - SG_LOG(SG_IO, SG_ALERT, "HLA version RTI1516E not yet(!?) supported."); - // _rtiFederate = new RTI1516eFederate(stringList); - break; - default: - SG_LOG(SG_NETWORK, SG_WARN, "HLA: Unknown rti version in connect!"); - } - return _rtiFederate.valid(); + _version = version; + _connectArguments = stringList; + return connect(); } bool @@ -190,17 +176,22 @@ HLAFederate::connect() SG_LOG(SG_NETWORK, SG_WARN, "HLA: Trying to connect to already connected federate!"); return false; } + + SGSharedPtr registry = RTIFederateFactoryRegistry::instance(); + if (!registry) { + SG_LOG(SG_NETWORK, SG_ALERT, "HLA: RTIFederateFactoryRegistry is no longer available!"); + return false; + } + switch (_version) { case RTI13: - _rtiFederate = new RTI13Federate(_connectArguments); + _rtiFederate = registry->create("RTI13", _connectArguments); break; case RTI1516: - SG_LOG(SG_IO, SG_ALERT, "HLA version RTI1516 not yet(!?) supported."); - // _rtiFederate = new RTI1516Federate(_connectArguments); + _rtiFederate = registry->create("RTI1516", _connectArguments); break; case RTI1516E: - SG_LOG(SG_IO, SG_ALERT, "HLA version RTI1516E not yet(!?) supported."); - // _rtiFederate = new RTI1516eFederate(_connectArguments); + _rtiFederate = registry->create("RTI1516E", _connectArguments); break; default: SG_LOG(SG_NETWORK, SG_WARN, "HLA: Unknown rti version in connect!"); @@ -729,7 +720,7 @@ HLAFederate::processMessages() } // Now flush just what is left - while (!_rtiFederate->processMessages(0, 0)); + while (_rtiFederate->processMessages(0, 0)); return true; } @@ -831,6 +822,27 @@ HLAFederate::readObjectModelTemplate(const std::string& objectModel, return true; } +bool +HLAFederate::readRTI13ObjectModelTemplate(const std::string& objectModel) +{ + SG_LOG(SG_IO, SG_ALERT, "HLA version RTI13 not yet(!?) supported."); + return false; +} + +bool +HLAFederate::readRTI1516ObjectModelTemplate(const std::string& objectModel) +{ + ObjectModelFactory objectModelFactory; + return readObjectModelTemplate(objectModel, objectModelFactory); +} + +bool +HLAFederate::readRTI1516EObjectModelTemplate(const std::string& objectModel) +{ + SG_LOG(SG_IO, SG_ALERT, "HLA version RTI1516E not yet(!?) supported."); + return false; +} + HLAObjectClass* HLAFederate::getObjectClass(const std::string& name) { @@ -849,6 +861,12 @@ HLAFederate::getObjectClass(const std::string& name) const return i->second.get(); } +HLAObjectClass* +HLAFederate::createObjectClass(const std::string& name) +{ + return new HLAObjectClass(name, *this); +} + HLAInteractionClass* HLAFederate::getInteractionClass(const std::string& name) { @@ -884,6 +902,14 @@ HLAFederate::readObjectModel() { /// Currently empty, but is called at the right time so that /// the object model is present when it is needed + // switch (getVersion()) { + // case RTI13: + // return readRTI13ObjectModelTemplate(getFederationObjectModel()); + // case RTI1516: + // return readRTI1516ObjectModelTemplate(getFederationObjectModel()); + // case RTI1516E: + // return readRTI1516EObjectModelTemplate(getFederationObjectModel()); + // } return true; }