]> git.mxchange.org Git - simgear.git/commitdiff
Move the decision which rti to use into HLAFederate.
authorMathias Froehlich <Mathias.Froehlich@web.de>
Tue, 30 Aug 2011 19:52:40 +0000 (21:52 +0200)
committerMathias Froehlich <Mathias.Froehlich@web.de>
Tue, 30 Aug 2011 20:18:29 +0000 (22:18 +0200)
simgear/hla/CMakeLists.txt
simgear/hla/HLA13Federate.cxx [deleted file]
simgear/hla/HLA13Federate.hxx [deleted file]
simgear/hla/HLAFederate.cxx
simgear/hla/HLAFederate.hxx
simgear/hla/Makefile.am
simgear/hla/RTI13Federate.cxx
simgear/hla/RTI13Federate.hxx

index bae6eb7381107c349194b082d234913372477546..207210abb0500aaf3da5b2b32462a2fbdabf8dd7 100644 (file)
@@ -26,9 +26,6 @@ set(HLA_HEADERS
     )
 
 set(HLA_SOURCES
-    RTIObjectClass.cxx
-    RTIObjectInstance.cxx
-    RTIFederate.cxx
     HLAArrayDataElement.cxx
     HLAArrayDataType.cxx
     HLABasicDataElement.cxx
@@ -51,15 +48,18 @@ set(HLA_SOURCES
 simgear_component(hla hla "${HLA_SOURCES}" "${HLA_HEADERS}")
 
 if(RTI_FOUND)
-  set(HLA13_HEADERS
-    HLA13Federate.hxx
-    )
-  set(HLA13_SOURCES
+  set(RTI13_SOURCES
     RTI13ObjectClass.cxx
     RTI13ObjectInstance.cxx
     RTI13Federate.cxx
-    HLA13Federate.cxx
     )
-  simgear_component(hla13 hla "${HLA13_SOURCES}" "${HLA13_HEADERS}")
-  set_property(TARGET sghla13 APPEND PROPERTY COMPILE_FLAGS "-I${RTI_INCLUDE_DIR}")
+  simgear_component(rti13 hla "${RTI13_SOURCES}" "")
+  set_property(TARGET sgrti13 APPEND PROPERTY COMPILE_FLAGS "-I${RTI_INCLUDE_DIR}")
 endif()
+
+set(RTI_SOURCES
+  RTIObjectClass.cxx
+  RTIObjectInstance.cxx
+  RTIFederate.cxx
+  )
+simgear_component(rti hla "${RTI_SOURCES}" "")
diff --git a/simgear/hla/HLA13Federate.cxx b/simgear/hla/HLA13Federate.cxx
deleted file mode 100644 (file)
index 4f78344..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright (C) 2009 - 2010  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
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-
-#include "HLA13Federate.hxx"
-
-#include "RTI13Federate.hxx"
-
-namespace simgear {
-
-HLA13Federate::HLA13Federate() :
-    HLAFederate(new RTI13Federate)
-{
-}
-
-HLA13Federate::~HLA13Federate()
-{
-}
-
-} // namespace simgear
diff --git a/simgear/hla/HLA13Federate.hxx b/simgear/hla/HLA13Federate.hxx
deleted file mode 100644 (file)
index dc3fa0b..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright (C) 2009 - 2010  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
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-
-#ifndef HLA13Federate_hxx
-#define HLA13Federate_hxx
-
-#include "HLAFederate.hxx"
-
-namespace simgear {
-
-class HLA13Federate : public HLAFederate {
-public:
-    HLA13Federate();
-    virtual ~HLA13Federate();
-};
-
-} // namespace simgear
-
-#endif
index d16494c90c3043b4b96f46d69dd40f686e8f7fb0..59a5f4b0cd56b9afc4375d9178b6bf09ddd2b7b9 100644 (file)
@@ -17,6 +17,7 @@
 
 #include "HLAFederate.hxx"
 
+#include "RTI13Federate.hxx"
 #include "RTIFederate.hxx"
 #include "RTIInteractionClass.hxx"
 #include "RTIObjectClass.hxx"
@@ -26,8 +27,7 @@
 
 namespace simgear {
 
-HLAFederate::HLAFederate(const SGSharedPtr<RTIFederate>& rtiFederate) :
-    _rtiFederate(rtiFederate)
+HLAFederate::HLAFederate()
 {
 }
 
@@ -35,105 +35,209 @@ HLAFederate::~HLAFederate()
 {
 }
 
-const std::string&
+std::string
 HLAFederate::getFederateType() const
 {
+    if (!_rtiFederate.valid()) {
+        SG_LOG(SG_NETWORK, SG_WARN, "HLA: Accessing unconnected federate!");
+        return std::string();
+    }
     return _rtiFederate->getFederateType();
 }
 
-const std::string&
+std::string
 HLAFederate::getFederationName() const
 {
+    if (!_rtiFederate.valid()) {
+        SG_LOG(SG_NETWORK, SG_WARN, "HLA: Accessing unconnected federate!");
+        return std::string();
+    }
     return _rtiFederate->getFederationName();
 }
 
+bool
+HLAFederate::connect(Version version, const std::list<std::string>& 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);
+        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();
+}
+
+bool
+HLAFederate::disconnect()
+{
+    if (!_rtiFederate.valid()) {
+        SG_LOG(SG_NETWORK, SG_WARN, "HLA: Accessing unconnected federate!");
+        return false;
+    }
+    _rtiFederate = 0;
+    return true;
+}
+
 bool
 HLAFederate::createFederationExecution(const std::string& federation, const std::string& objectModel)
 {
+    if (!_rtiFederate.valid()) {
+        SG_LOG(SG_NETWORK, SG_WARN, "HLA: Accessing unconnected federate!");
+        return false;
+    }
     return _rtiFederate->createFederationExecution(federation, objectModel);
 }
 
 bool
 HLAFederate::destroyFederationExecution(const std::string& federation)
 {
+    if (!_rtiFederate.valid()) {
+        SG_LOG(SG_NETWORK, SG_WARN, "HLA: Accessing unconnected federate!");
+        return false;
+    }
     return _rtiFederate->destroyFederationExecution(federation);
 }
 
 bool
 HLAFederate::join(const std::string& federateType, const std::string& federation)
 {
+    if (!_rtiFederate.valid()) {
+        SG_LOG(SG_NETWORK, SG_WARN, "HLA: Accessing unconnected federate!");
+        return false;
+    }
     return _rtiFederate->join(federateType, federation);
 }
 
 bool
 HLAFederate::resign()
 {
+    if (!_rtiFederate.valid()) {
+        SG_LOG(SG_NETWORK, SG_WARN, "HLA: Accessing unconnected federate!");
+        return false;
+    }
     return _rtiFederate->resign();
 }
 
 bool
 HLAFederate::enableTimeConstrained()
 {
+    if (!_rtiFederate.valid()) {
+        SG_LOG(SG_NETWORK, SG_WARN, "HLA: Accessing unconnected federate!");
+        return false;
+    }
     return _rtiFederate->enableTimeConstrained();
 }
 
 bool
 HLAFederate::disableTimeConstrained()
 {
+    if (!_rtiFederate.valid()) {
+        SG_LOG(SG_NETWORK, SG_WARN, "HLA: Accessing unconnected federate!");
+        return false;
+    }
     return _rtiFederate->disableTimeConstrained();
 }
 
 bool
 HLAFederate::enableTimeRegulation(const SGTimeStamp& lookahead)
 {
+    if (!_rtiFederate.valid()) {
+        SG_LOG(SG_NETWORK, SG_WARN, "HLA: Accessing unconnected federate!");
+        return false;
+    }
     return _rtiFederate->enableTimeRegulation(lookahead);
 }
 
 bool
 HLAFederate::disableTimeRegulation()
 {
+    if (!_rtiFederate.valid()) {
+        SG_LOG(SG_NETWORK, SG_WARN, "HLA: Accessing unconnected federate!");
+        return false;
+    }
     return _rtiFederate->disableTimeRegulation();
 }
 
 bool
 HLAFederate::timeAdvanceRequestBy(const SGTimeStamp& dt)
 {
+    if (!_rtiFederate.valid()) {
+        SG_LOG(SG_NETWORK, SG_WARN, "HLA: Accessing unconnected federate!");
+        return false;
+    }
     return _rtiFederate->timeAdvanceRequestBy(dt);
 }
 
 bool
 HLAFederate::timeAdvanceRequest(const SGTimeStamp& dt)
 {
+    if (!_rtiFederate.valid()) {
+        SG_LOG(SG_NETWORK, SG_WARN, "HLA: Accessing unconnected federate!");
+        return false;
+    }
     return _rtiFederate->timeAdvanceRequest(dt);
 }
 
 bool
 HLAFederate::queryFederateTime(SGTimeStamp& timeStamp)
 {
+    if (!_rtiFederate.valid()) {
+        SG_LOG(SG_NETWORK, SG_WARN, "HLA: Accessing unconnected federate!");
+        return false;
+    }
     return _rtiFederate->queryFederateTime(timeStamp);
 }
 
 bool
 HLAFederate::modifyLookahead(const SGTimeStamp& timeStamp)
 {
+    if (!_rtiFederate.valid()) {
+        SG_LOG(SG_NETWORK, SG_WARN, "HLA: Accessing unconnected federate!");
+        return false;
+    }
     return _rtiFederate->modifyLookahead(timeStamp);
 }
 
 bool
 HLAFederate::queryLookahead(SGTimeStamp& timeStamp)
 {
+    if (!_rtiFederate.valid()) {
+        SG_LOG(SG_NETWORK, SG_WARN, "HLA: Accessing unconnected federate!");
+        return false;
+    }
     return _rtiFederate->queryLookahead(timeStamp);
 }
 
 bool
 HLAFederate::tick()
 {
+    if (!_rtiFederate.valid()) {
+        SG_LOG(SG_NETWORK, SG_WARN, "HLA: Accessing unconnected federate!");
+        return false;
+    }
     return _rtiFederate->tick();
 }
 
 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->tick(minimum, maximum);
 }
 
@@ -142,8 +246,7 @@ HLAFederate::readObjectModelTemplate(const std::string& objectModel,
                                      HLAFederate::ObjectModelFactory& objectModelFactory)
 {
     if (!_rtiFederate.valid()) {
-        SG_LOG(SG_IO, SG_ALERT, "Could not process HLA XML object model file: "
-               "No rti federate available!");
+        SG_LOG(SG_NETWORK, SG_WARN, "HLA: Accessing unconnected federate!");
         return false;
     }
 
index 7376540e4bbe9f26909c716ff26510daa8a8f6a5..5af83396fe6c75cd0eb5ccbcb4a1daa56026063f 100644 (file)
@@ -32,11 +32,22 @@ class RTIFederate;
 
 class HLAFederate : public SGWeakReferenced {
 public:
+    enum Version {
+        RTI13,
+        RTI1516,
+        RTI1516E
+    };
+
+    HLAFederate();
     virtual ~HLAFederate();
 
+    /// connect to an rti
+    bool connect(Version version, const std::list<std::string>& stringList);
+    bool disconnect();
+
     /// Get the name of the joined federate/federation
-    const std::string& getFederateType() const;
-    const std::string& getFederationName() const;
+    std::string getFederateType() const;
+    std::string getFederationName() const;
 
     /// Create a federation execution
     /// Semantically this methods should be static,
@@ -94,9 +105,6 @@ public:
     HLAInteractionClass* getInteractionClass(const std::string& name);
     const HLAInteractionClass* getInteractionClass(const std::string& name) const;
 
-protected:
-    HLAFederate(const SGSharedPtr<RTIFederate>& rtiFederate);
-
 private:
     SGSharedPtr<RTIFederate> _rtiFederate;
 
index e4af153109319ef5aeab332e9d3774008c62d7e8..67542ddb09722ab3a832959c7325556372a3bd4a 100644 (file)
@@ -29,9 +29,6 @@ libsghla_a_HEADERS = \
        HLAVariantDataType.hxx
 
 libsghla_a_SOURCES = \
-       RTIObjectClass.cxx \
-       RTIObjectInstance.cxx \
-       RTIFederate.cxx \
        HLAArrayDataElement.cxx \
        HLAArrayDataType.cxx \
        HLABasicDataElement.cxx \
@@ -53,17 +50,23 @@ libsghla_a_SOURCES = \
 
 if ENABLE_HLA13
 
-lib_LIBRARIES += libsghla13.a
-
-libsghla13_adir = @includedir@/hla
+lib_LIBRARIES += libsgrti13.a
 
-libsghla13_a_HEADERS = \
-       HLA13Federate.hxx
+libsgrti13_adir = @includedir@/hla
 
-libsghla13_a_SOURCES = \
+libsgrti13_a_SOURCES = \
        RTI13ObjectClass.cxx \
        RTI13ObjectInstance.cxx \
-       RTI13Federate.cxx \
-       HLA13Federate.cxx
+       RTI13Federate.cxx
 
 endif
+
+lib_LIBRARIES += libsgrti.a
+
+libsgrti_adir = @includedir@/hla
+
+libsgrti_a_SOURCES = \
+       RTIObjectClass.cxx \
+       RTIObjectInstance.cxx \
+       RTIFederate.cxx
+
index 649a9f58ec32a9bde811d9407754a38f3fa4b424..a77fbaea8a8aded9c4650fc3dad3584428eda7fc 100644 (file)
 
 namespace simgear {
 
-RTI13Federate::RTI13Federate() :
+RTI13Federate::RTI13Federate(const std::list<std::string>& stringList) :
     _tickTimeout(10),
     _ambassador(new RTI13Ambassador)
 {
+    if (stringList.empty()) {
+        SG_LOG(SG_NETWORK, SG_WARN, "RTI: Ignoring non empty connect arguments while connecting to an RTI13 federation!");
+    }
 }
 
 RTI13Federate::~RTI13Federate()
index 8ace9e58788781d05a974e6d85e464632777989e..839e7d508b743108284e4910d1f06fe3295636ba 100644 (file)
@@ -34,7 +34,7 @@ class RTI13Ambassador;
 
 class RTI13Federate : public RTIFederate {
 public:
-    RTI13Federate();
+    RTI13Federate(const std::list<std::string>& stringList);
     virtual ~RTI13Federate();
 
     virtual bool createFederationExecution(const std::string& federation, const std::string& objectModel);