[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[certi-cvs] certi libRTI/ieee1516-2000/RTIambassadorFactory...
From: |
CERTI CVS commits |
Subject: |
[certi-cvs] certi libRTI/ieee1516-2000/RTIambassadorFactory... |
Date: |
Thu, 06 Mar 2014 16:11:33 +0000 |
CVSROOT: /sources/certi
Module name: certi
Changes by: Eric NOULARD <erk> 14/03/06 16:11:33
Modified files:
libRTI/ieee1516-2000: RTIambassadorFactory.cpp CMakeLists.txt
libRTI/ieee1516-2010: RTIvariableLengthData.cpp CMakeLists.txt
HandleImplementation.cpp
libRTI : CMakeLists.txt
include/ieee1516-2010/RTI: certiLogicalTimeInterval.h
certiLogicalTime.h
certiLogicalTimeFactory.h
Added files:
libRTI/ieee1516-2010: RTIambassador.cpp RTIambPrivateRefs.h
RTIambassadorImplementation.cpp
RTIambPrivateRefs.cpp RTIfedAmbassador.cpp
RTIambassadorImplementation.h
RTIambassadorFactory.cpp
Log message:
One more step towards IEEE-1516-2010 API not working yet
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/certi/libRTI/ieee1516-2000/RTIambassadorFactory.cpp?cvsroot=certi&r1=1.2&r2=1.3
http://cvs.savannah.gnu.org/viewcvs/certi/libRTI/ieee1516-2000/CMakeLists.txt?cvsroot=certi&r1=1.4&r2=1.5
http://cvs.savannah.gnu.org/viewcvs/certi/libRTI/ieee1516-2010/RTIvariableLengthData.cpp?cvsroot=certi&r1=1.2&r2=1.3
http://cvs.savannah.gnu.org/viewcvs/certi/libRTI/ieee1516-2010/CMakeLists.txt?cvsroot=certi&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/certi/libRTI/ieee1516-2010/HandleImplementation.cpp?cvsroot=certi&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/certi/libRTI/ieee1516-2010/RTIambassador.cpp?cvsroot=certi&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/certi/libRTI/ieee1516-2010/RTIambPrivateRefs.h?cvsroot=certi&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/certi/libRTI/ieee1516-2010/RTIambassadorImplementation.cpp?cvsroot=certi&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/certi/libRTI/ieee1516-2010/RTIambPrivateRefs.cpp?cvsroot=certi&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/certi/libRTI/ieee1516-2010/RTIfedAmbassador.cpp?cvsroot=certi&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/certi/libRTI/ieee1516-2010/RTIambassadorImplementation.h?cvsroot=certi&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/certi/libRTI/ieee1516-2010/RTIambassadorFactory.cpp?cvsroot=certi&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/certi/libRTI/CMakeLists.txt?cvsroot=certi&r1=1.32&r2=1.33
http://cvs.savannah.gnu.org/viewcvs/certi/include/ieee1516-2010/RTI/certiLogicalTimeInterval.h?cvsroot=certi&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/certi/include/ieee1516-2010/RTI/certiLogicalTime.h?cvsroot=certi&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/certi/include/ieee1516-2010/RTI/certiLogicalTimeFactory.h?cvsroot=certi&r1=1.1&r2=1.2
Patches:
Index: libRTI/ieee1516-2000/RTIambassadorFactory.cpp
===================================================================
RCS file: /sources/certi/certi/libRTI/ieee1516-2000/RTIambassadorFactory.cpp,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- libRTI/ieee1516-2000/RTIambassadorFactory.cpp 6 Mar 2014 12:14:10
-0000 1.2
+++ libRTI/ieee1516-2000/RTIambassadorFactory.cpp 6 Mar 2014 16:11:31
-0000 1.3
@@ -1,4 +1,25 @@
-//#include "RTI/RTI1516.h"
+// ----------------------------------------------------------------------------
+// CERTI - HLA RunTime Infrastructure
+// Copyright (C) 2002-2014 ONERA
+//
+// This file is part of CERTI-libRTI
+//
+// CERTI-libRTI is free software ; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public License
+// as published by the Free Software Foundation ; either version 2 of
+// the License, or (at your option) any later version.
+//
+// CERTI-libRTI 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
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this program ; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA
+//
+// ----------------------------------------------------------------------------
#include <RTI/RTIambassadorFactory.h>
#include <memory>
Index: libRTI/ieee1516-2000/CMakeLists.txt
===================================================================
RCS file: /sources/certi/certi/libRTI/ieee1516-2000/CMakeLists.txt,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- libRTI/ieee1516-2000/CMakeLists.txt 6 Mar 2014 12:14:10 -0000 1.4
+++ libRTI/ieee1516-2000/CMakeLists.txt 6 Mar 2014 16:11:31 -0000 1.5
@@ -7,7 +7,7 @@
# This STATIC library is necessary on Windows in order
# to avoid circular dependencies
# FIXME
-# may be we can use CMakeOBJECT library instead
+# may be we can use CMake OBJECT library instead
# FIXME
##########################################################
if (WIN32)
Index: libRTI/ieee1516-2010/RTIvariableLengthData.cpp
===================================================================
RCS file: /sources/certi/certi/libRTI/ieee1516-2010/RTIvariableLengthData.cpp,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- libRTI/ieee1516-2010/RTIvariableLengthData.cpp 6 Mar 2014 16:01:36
-0000 1.2
+++ libRTI/ieee1516-2010/RTIvariableLengthData.cpp 6 Mar 2014 16:11:31
-0000 1.3
@@ -96,6 +96,9 @@
// Caller gives up ownership of inData to this object.
// This object assumes the responsibility of deleting inData
// when it is no longer needed.
+ // The allocation of inData is assumed to have been through an array
+ // alloctor (e.g., char* data = new char[20]. If the data was allocated
+ // in some other fashion, a deletion function must be supplied.
void VariableLengthData::takeDataPointer(void* inData, unsigned long
inSize, VariableLengthDataDeleteFunction func)
{
if (_impl == 0)
Index: libRTI/ieee1516-2010/CMakeLists.txt
===================================================================
RCS file: /sources/certi/certi/libRTI/ieee1516-2010/CMakeLists.txt,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- libRTI/ieee1516-2010/CMakeLists.txt 3 Mar 2014 15:18:24 -0000 1.1
+++ libRTI/ieee1516-2010/CMakeLists.txt 6 Mar 2014 16:11:32 -0000 1.2
@@ -3,6 +3,152 @@
include_directories(${CMAKE_BINARY_DIR}/include/ieee1516-2010)
# TO BE CONTINUED
+##########################################################
+# VariableLengthData
+# This STATIC library is necessary on Windows in order
+# to avoid circular dependencies
+# FIXME
+# may be we can use CMake OBJECT library instead
+# FIXME
+##########################################################
+if (WIN32)
+ set(VARDATA1516E_SRCS
+ RTIvariableLengthData.cpp
+ RTIvariableLengthDataImplementation.h
+ ${CMAKE_SOURCE_DIR}/include/ieee1516-2010/RTI/VariableLengthData.h
+ )
+
+
+ add_library(VarData1516e STATIC ${VARDATA1516_SRCS})
+ target_link_libraries(VarData1516e)
+ set_target_properties(VarData1516e PROPERTIES PROJECT_LABEL LibVarData1516e)
+ set_target_properties(VarData1516e PROPERTIES COMPILE_FLAGS
"-DRTI_DISABLE_WARNINGS -DSTATIC_RTI")
+ # There shouldn't be any def file for STATIC library since this is not a DLL
+ # Commenting out next line.
+ #if (MINGW)
+ # set_target_properties(VarData1516 PROPERTIES LINK_FLAGS
"-Wl,--output-def,${LIBRARY_OUTPUT_PATH}/libVarData1516.def")
+ # install(FILES ${LIBRARY_OUTPUT_PATH}/libVarData1516.def
+ # DESTINATION lib)
+ #endif (MINGW)
+ # There shouldn't be any SOVERSION as well
+ #set_target_properties(VarData1516 PROPERTIES VERSION 1.0.0 SOVERSION 1)
+ set(VarData1516eTarget "VarData1516e")
+else()
+ set(VarData1516eTarget "")
+endif (WIN32)
+
+##########################
+# RTI1516e
+##########################
+
+set(RTI1516e_LIB_SRCS
+ RTIambassadorFactory.cpp
+ Exception.cpp
+ RTIvariableLengthData.cpp
+ RTIvariableLengthDataImplementation.h
+ RTIambassador.cpp
+ RTIambassadorImplementation.cpp
+ RTIambassadorImplementation.h
+ RTIambPrivateRefs.cpp
+ RTIambPrivateRefs.h
+ Handle.cpp
+ HandleImplementation.cpp
+ HandleImplementation.h
+ RTIfedAmbassador.cpp
+ RTIHandleFactory.cpp
+ RTIHandleFactory.h
+ )
+
+set(RTI1516e_LIB_INCLUDE
+ ${CMAKE_BINARY_DIR}/include/hla-1_3/RTItypes.hh
+ ${CMAKE_SOURCE_DIR}/include/ieee1516-2010/RTI/Enums.h
+ ${CMAKE_SOURCE_DIR}/include/ieee1516-2010/RTI/Exception.h
+ ${CMAKE_SOURCE_DIR}/include/ieee1516-2010/RTI/FederateAmbassador.h
+ ${CMAKE_SOURCE_DIR}/include/ieee1516-2010/RTI/Handle.h
+ ${CMAKE_SOURCE_DIR}/include/ieee1516-2010/RTI/LogicalTime.h
+ ${CMAKE_SOURCE_DIR}/include/ieee1516-2010/RTI/LogicalTimeFactory.h
+ ${CMAKE_SOURCE_DIR}/include/ieee1516-2010/RTI/LogicalTimeInterval.h
+ ${CMAKE_SOURCE_DIR}/include/ieee1516-2010/RTI/NullFederateAmbassador.h
+ ${CMAKE_SOURCE_DIR}/include/ieee1516-2010/RTI/RangeBounds.h
+ ${CMAKE_SOURCE_DIR}/include/ieee1516-2010/RTI/RTI1516.h
+ ${CMAKE_SOURCE_DIR}/include/ieee1516-2010/RTI/RTIambassador.h
+ ${CMAKE_SOURCE_DIR}/include/ieee1516-2010/RTI/RTIambassadorFactory.h
+ ${CMAKE_SOURCE_DIR}/include/ieee1516-2010/RTI/SpecificConfig.h
+ ${CMAKE_SOURCE_DIR}/include/ieee1516-2010/RTI/Typedefs.h
+ ${CMAKE_SOURCE_DIR}/include/ieee1516-2010/RTI/VariableLengthData.h
+)
+
+add_library(RTI1516e ${RTI1516e_LIB_SRCS} ${RTI1516e_LIB_INCLUDE})
+# Incorrect line
+#target_link_libraries(RTI1516 CERTI)
+# Correct line
+target_link_libraries(RTI1516e CERTI FedTime1516)
+install(FILES RTI1516fedTime.h DESTINATION include/ieee1516-2010/RTI)
+message(STATUS "libRTI variant: HLA 1516")
+set_target_properties(RTI1516e PROPERTIES OUTPUT_NAME "RTI1516e")
+set_target_properties(RTI1516e PROPERTIES COMPILE_FLAGS "-DHLA13NG_LIBRTI
-DRTI_DISABLE_WARNINGS -DBUILDING_RTI")
+set_target_properties(RTI1516e PROPERTIES VERSION 1.0.0 SOVERSION 1)
+if (MINGW)
+ set_target_properties(RTI1516e PROPERTIES LINK_FLAGS
"-Wl,--output-def,${LIBRARY_OUTPUT_PATH}/libRTI1516e.def")
+ install(FILES ${LIBRARY_OUTPUT_PATH}/libRTI1516e.def DESTINATION lib)
+endif (MINGW)
+
+
+##########################################################
+set(FEDTIME1516_SRCS
+ ${CMAKE_SOURCE_DIR}/include/ieee1516-2010/RTI/certiLogicalTime.h
+ ${CMAKE_SOURCE_DIR}/include/ieee1516-2010/RTI/certiLogicalTimeInterval.h
+ ${CMAKE_SOURCE_DIR}/include/ieee1516-2010/RTI/certiLogicalTimeFactory.h
+ RTI1516fedTime.h
+ RTI1516fedTime.cpp
+ )
+
+if (BUILD_WITH_EXTRA_LOGICAL_TIME)
+ list(APPEND FEDTIME1516e_SRC
+ LogicalTimeDouble.h
+ LogicalTimeDouble.cpp
+ )
+endif(BUILD_WITH_EXTRA_LOGICAL_TIME)
+
+add_library(FedTime1516e ${FEDTIME1516_SRCS})
+# Correct line
+target_link_libraries(FedTime1516e ${VarData1516eTarget})
+# Incorrect line
+# (at least the dependency exists but we cannot specify that
+# because we would generate a circular deps
RTI1516e-->FedTime1516e-->RTI1516e)
+#target_link_libraries(FedTime1516e RTI1516e)
+
+set_target_properties(FedTime1516e PROPERTIES PROJECT_LABEL LibFedTime1516e)
+set_target_properties(FedTime1516e PROPERTIES COMPILE_FLAGS
"-DBUILDING_FEDTIME -DRTI_DISABLE_WARNINGS -DSTATIC_RTI")
+
+if(MINGW)
+ set_target_properties(FedTime1516e PROPERTIES LINK_FLAGS
"-Wl,--output-def,${LIBRARY_OUTPUT_PATH}/libFedTime1516.def")
+ install(FILES ${LIBRARY_OUTPUT_PATH}/libFedTime1516e.def
+ DESTINATION lib)
+endif(MINGW)
+
+set_target_properties(FedTime1516 PROPERTIES VERSION 1.0.0 SOVERSION 1)
+
+set(TestFedTime1516e_SRCS
+ TestFedTime.cc
+)
+
+#ADD_EXECUTABLE(TestFedTime1516 ${TestFedTime1516_SRCS})
+
+# TODO: Should link with RTI1516 lib, instead of base RTI lib
+#target_link_libraries(TestFedTime1516 FedTime1516 RTI1516)
+
+#ADD_TEST(TestLibFedTime1516 COMMAND $<TARGET_FILE:TestFedTime1516>)
+
+
+# Install rules for both libRTI156 and libFedTime1516
+install(TARGETS RTI1516e FedTime1516e ${VarData1516eTarget}
+ EXPORT CERTIDepends
+ RUNTIME DESTINATION bin
+ LIBRARY DESTINATION lib
+ ARCHIVE DESTINATION lib)
+
+
# mimic install directory structure in the binary tree in order to ease the
linking
# of builtin test (i.e. testFederate)
Index: libRTI/ieee1516-2010/HandleImplementation.cpp
===================================================================
RCS file: /sources/certi/certi/libRTI/ieee1516-2010/HandleImplementation.cpp,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- libRTI/ieee1516-2010/HandleImplementation.cpp 3 Mar 2014 16:43:28
-0000 1.1
+++ libRTI/ieee1516-2010/HandleImplementation.cpp 6 Mar 2014 16:11:32
-0000 1.2
@@ -22,9 +22,10 @@
// ----------------------------------------------------------------------------
#include <RTI/Handle.h>
-#include <limits.h>
+#include <climits>
#include <sstream>
#include <cstring>
+#include <stdint.h>
#include "HandleImplementation.h"
namespace rti1516e
@@ -48,7 +49,7 @@
}
memcpy(&val, encodedValue.data(), size);
- for(uint32_t i = 0; i < sizeof(val); i++)
+ for(::uint32_t i = 0; i < sizeof(val); i++)
{
buf[size-i-1] = (char) val & 0xFF;
val = val >> 8;
Index: libRTI/CMakeLists.txt
===================================================================
RCS file: /sources/certi/certi/libRTI/CMakeLists.txt,v
retrieving revision 1.32
retrieving revision 1.33
diff -u -b -r1.32 -r1.33
--- libRTI/CMakeLists.txt 3 Mar 2014 15:18:20 -0000 1.32
+++ libRTI/CMakeLists.txt 6 Mar 2014 16:11:32 -0000 1.33
@@ -7,4 +7,4 @@
# Process standard specific libRTI implementation
add_subdirectory(hla-1_3)
add_subdirectory(ieee1516-2000)
-add_subdirectory(ieee1516-2010)
\ No newline at end of file
+#add_subdirectory(ieee1516-2010)
\ No newline at end of file
Index: include/ieee1516-2010/RTI/certiLogicalTimeInterval.h
===================================================================
RCS file:
/sources/certi/certi/include/ieee1516-2010/RTI/certiLogicalTimeInterval.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- include/ieee1516-2010/RTI/certiLogicalTimeInterval.h 3 Mar 2014
16:43:28 -0000 1.1
+++ include/ieee1516-2010/RTI/certiLogicalTimeInterval.h 6 Mar 2014
16:11:32 -0000 1.2
@@ -31,7 +31,7 @@
// below. The encoded time classes are used to hold the arbitrary bit
// representation of the logical time and logical time intervals.
-namespace rti1516
+namespace rti1516e
{
class LogicalTime;
}
@@ -41,7 +41,7 @@
#include <string>
#include <RTI/VariableLengthData.h>
-namespace rti1516
+namespace rti1516e
{
class FEDTIME_EXPORT LogicalTimeInterval
{
Index: include/ieee1516-2010/RTI/certiLogicalTime.h
===================================================================
RCS file: /sources/certi/certi/include/ieee1516-2010/RTI/certiLogicalTime.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- include/ieee1516-2010/RTI/certiLogicalTime.h 3 Mar 2014 16:43:29
-0000 1.1
+++ include/ieee1516-2010/RTI/certiLogicalTime.h 6 Mar 2014 16:11:33
-0000 1.2
@@ -32,7 +32,7 @@
// encoded time classes are used to hold the arbitrary bit representation of
the
// logical time and logical time intervals.
-namespace rti1516
+namespace rti1516e
{
class LogicalTimeInterval;
}
@@ -42,7 +42,7 @@
#include <string>
#include <RTI/VariableLengthData.h>
-namespace rti1516
+namespace rti1516e
{
class FEDTIME_EXPORT LogicalTime
{
Index: include/ieee1516-2010/RTI/certiLogicalTimeFactory.h
===================================================================
RCS file:
/sources/certi/certi/include/ieee1516-2010/RTI/certiLogicalTimeFactory.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- include/ieee1516-2010/RTI/certiLogicalTimeFactory.h 3 Mar 2014 16:43:29
-0000 1.1
+++ include/ieee1516-2010/RTI/certiLogicalTimeFactory.h 6 Mar 2014 16:11:33
-0000 1.2
@@ -25,7 +25,7 @@
// ****************************************************************
-namespace rti1516
+namespace rti1516e
{
class LogicalTime;
class LogicalTimeInterval;
@@ -52,7 +52,7 @@
// obtain a LogicalTimeFactory for a federation, and then will use that
factory to create
// any instances of LogicalTime or LogicalTimeInterval that it needs.
-namespace rti1516
+namespace rti1516e
{
class FEDTIME_EXPORT LogicalTimeFactory
{
Index: libRTI/ieee1516-2010/RTIambassador.cpp
===================================================================
RCS file: libRTI/ieee1516-2010/RTIambassador.cpp
diff -N libRTI/ieee1516-2010/RTIambassador.cpp
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ libRTI/ieee1516-2010/RTIambassador.cpp 6 Mar 2014 16:11:31 -0000
1.1
@@ -0,0 +1,35 @@
+// ----------------------------------------------------------------------------
+// CERTI - HLA RunTime Infrastructure
+// Copyright (C) 2002-2014 ONERA
+//
+// This file is part of CERTI-libRTI
+//
+// CERTI-libRTI is free software ; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public License
+// as published by the Free Software Foundation ; either version 2 of
+// the License, or (at your option) any later version.
+//
+// CERTI-libRTI 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
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this program ; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA
+//
+// ----------------------------------------------------------------------------
+
+#include <RTI/RTIambassador.h>
+
+namespace rti1516e
+{
+RTIambassador::RTIambassador() throw()
+{
+}
+
+RTIambassador::~RTIambassador()
+{
+}
+} // end namespace rti1516
Index: libRTI/ieee1516-2010/RTIambPrivateRefs.h
===================================================================
RCS file: libRTI/ieee1516-2010/RTIambPrivateRefs.h
diff -N libRTI/ieee1516-2010/RTIambPrivateRefs.h
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ libRTI/ieee1516-2010/RTIambPrivateRefs.h 6 Mar 2014 16:11:31 -0000
1.1
@@ -0,0 +1,62 @@
+// ----------------------------------------------------------------------------
+// CERTI - HLA RunTime Infrastructure
+// Copyright (C) 2002-2005 ONERA
+//
+// This file is part of CERTI-libRTI
+//
+// CERTI-libRTI is free software ; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public License
+// as published by the Free Software Foundation ; either version 2 of
+// the License, or (at your option) any later version.
+//
+// CERTI-libRTI 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
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this program ; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA
+//
+// $Id: RTIambPrivateRefs.h,v 1.1 2014/03/06 16:11:31 erk Exp $
+// ----------------------------------------------------------------------------
+
+#include <RTI/certiRTI1516.h>
+#include "Message.hh"
+#include "RootObject.hh"
+#include "MessageBuffer.hh"
+
+using namespace certi ;
+
+class RTI1516ambPrivateRefs
+{
+public:
+ RTI1516ambPrivateRefs();
+ ~RTI1516ambPrivateRefs();
+
+ void processException(Message *);
+ void executeService(Message *requete, Message *reponse);
+ void sendTickRequestStop();
+ void callFederateAmbassador(Message *msg) throw
(rti1516::RTIinternalError);
+ void leave(const char *msg) throw (rti1516::RTIinternalError);
+
+#ifdef _WIN32
+ HANDLE handle_RTIA;
+#else
+ pid_t pid_RTIA ; //!< pid associated with rtia fork (private).
+#endif
+
+ //! Federate Ambassador reference for module calls.
+ rti1516::FederateAmbassador *fed_amb ;
+
+ //! used to prevent reentrant calls (see tick() and executeService()).
+ bool is_reentrant ;
+
+ RootObject *_theRootObj ;
+
+ SocketUN *socketUn ;
+ MessageBuffer msgBufSend,msgBufReceive ;
+};
+
+// $Id: RTIambPrivateRefs.h,v 1.1 2014/03/06 16:11:31 erk Exp $
Index: libRTI/ieee1516-2010/RTIambassadorImplementation.cpp
===================================================================
RCS file: libRTI/ieee1516-2010/RTIambassadorImplementation.cpp
diff -N libRTI/ieee1516-2010/RTIambassadorImplementation.cpp
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ libRTI/ieee1516-2010/RTIambassadorImplementation.cpp 6 Mar 2014
16:11:31 -0000 1.1
@@ -0,0 +1,2872 @@
+// ----------------------------------------------------------------------------
+// CERTI - HLA RunTime Infrastructure
+// Copyright (C) 2002-2014 ONERA
+//
+// This file is part of CERTI-libRTI
+//
+// CERTI-libRTI is free software ; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public License
+// as published by the Free Software Foundation ; either version 2 of
+// the License, or (at your option) any later version.
+//
+// CERTI-libRTI 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
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this program ; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA
+//
+// ----------------------------------------------------------------------------
+
+#include "RTIambassadorImplementation.h"
+#include <RTI/RangeBounds.h>
+
+#ifndef _WIN32
+#include <cstdlib>
+#include <cstring>
+#endif
+
+#include "PrettyDebug.hh"
+
+#include "M_Classes.hh"
+#include "RTIHandleFactory.h"
+#include "RTI1516fedTime.h"
+
+#include <algorithm>
+
+namespace {
+
+static PrettyDebug D("LIBRTI", __FILE__);
+static PrettyDebug G("GENDOC",__FILE__) ;
+
+}
+
+namespace certi
+{
+/* Deletor Object */
+template <class T>
+struct Deletor {
+ void operator() (T* e) {delete e;};
+};
+
+/* Helper functions */
+template<typename T>
+void
+RTI1516ambassador::assignPHVMAndExecuteService(const
rti1516e::ParameterHandleValueMap &PHVM, T &req, T &rep) {
+
+ req.setParametersSize(PHVM.size());
+ req.setValuesSize(PHVM.size());
+ uint32_t i = 0;
+ for ( rti1516e::ParameterHandleValueMap::const_iterator it = PHVM.begin();
it != PHVM.end(); it++, ++i)
+ {
+
req.setParameters(rti1516e::ParameterHandleFriend::toCertiHandle(it->first),i);
+ certi::ParameterValue_t paramValue;
+ paramValue.resize(it->second.size());
+ memcpy(&(paramValue[0]), it->second.data(), it->second.size());
+ req.setValues(paramValue, i);
+ }
+ privateRefs->executeService(&req, &rep);
+}
+
+template<typename T>
+void
+RTI1516ambassador::assignAHVMAndExecuteService(const
rti1516e::AttributeHandleValueMap &AHVM, T &req, T &rep) {
+
+ req.setAttributesSize(AHVM.size());
+ req.setValuesSize(AHVM.size());
+ uint32_t i = 0;
+ for ( rti1516e::AttributeHandleValueMap::const_iterator it = AHVM.begin();
it != AHVM.end(); it++, ++i)
+ {
+
req.setAttributes(rti1516e::AttributeHandleFriend::toCertiHandle(it->first),i);
+ certi::AttributeValue_t attrValue;
+ attrValue.resize(it->second.size());
+ memcpy(&(attrValue[0]), it->second.data(), it->second.size());
+ req.setValues(attrValue, i);
+ }
+ privateRefs->executeService(&req, &rep);
+}
+
+template<typename T>
+void
+RTI1516ambassador::assignAHSAndExecuteService(const
rti1516e::AttributeHandleSet &AHS, T &req, T &rep) {
+ req.setAttributesSize(AHS.size());
+ uint32_t i = 0;
+ for ( rti1516e::AttributeHandleSet::const_iterator it = AHS.begin(); it !=
AHS.end(); it++, ++i)
+ {
+ certi::AttributeHandle certiHandle =
rti1516e::AttributeHandleFriend::toCertiHandle(*it);
+ req.setAttributes(certiHandle,i);
+ }
+ privateRefs->executeService(&req, &rep);
+}
+
+std::string varLengthDataAsString(rti1516e::VariableLengthData varLengthData) {
+ std::string retVal( (char*)varLengthData.data(), varLengthData.size() );
+ return retVal;
+}
+
+certi::TransportType toCertiTransportationType(rti1516e::TransportationType
theType) {
+ return (theType == rti1516e::RELIABLE) ? certi::RELIABLE :
certi::BEST_EFFORT;
+}
+rti1516e::TransportationType toRTI1516TransportationType(certi::TransportType
theType) {
+ return (theType == certi::RELIABLE) ? rti1516e::RELIABLE :
rti1516e::BEST_EFFORT;
+}
+certi::OrderType toCertiOrderType(rti1516e::OrderType theType) {
+ return (theType == rti1516e::RECEIVE) ? certi::RECEIVE : certi::TIMESTAMP;
+}
+rti1516e::OrderType toRTI1516OrderType(certi::OrderType theType) {
+ return (theType == certi::RECEIVE) ? rti1516e::RECEIVE :
rti1516e::TIMESTAMP;
+}
+/* end of Helper functions */
+
+
+RTI1516ambassador::RTI1516ambassador() throw()
+ : privateRefs(0)
+{
+}
+
+RTI1516ambassador::~RTI1516ambassador()
+{
+ certi::M_Close_Connexion req, rep ;
+
+ G.Out(pdGendoc," ====>executeService CLOSE_CONNEXION");
+ privateRefs->executeService(&req, &rep);
+ // after the response is received, the privateRefs->socketUn must not be
used
+
+ delete privateRefs;
+}
+
+// ----------------------------------------------------------------------------
+//! Generic callback evocation (CERTI extension).
+/*! Blocks up to "minimum" seconds until a callback delivery and then evokes a
+ * single callback.
+ * @return true if additional callbacks pending, false otherwise
+ */
+bool RTI1516ambassador::__tick_kernel(bool multiple, TickTime minimum,
TickTime maximum)
+throw (rti1516e::SpecifiedSaveLabelDoesNotExist,
+ rti1516e::RTIinternalError)
+ {
+ M_Tick_Request vers_RTI;
+ std::auto_ptr<Message> vers_Fed(NULL);
+
+ // Request callback(s) from the local RTIA
+ vers_RTI.setMultiple(multiple);
+ vers_RTI.setMinTickTime(minimum);
+ vers_RTI.setMaxTickTime(maximum);
+
+ try {
+ vers_RTI.send(privateRefs->socketUn,privateRefs->msgBufSend);
+ }
+ catch (NetworkError &e) {
+ std::stringstream msg;
+ msg << "NetworkError in tick() while sending TICK_REQUEST: " <<
e._reason;
+ std::wstring message(msg.str().begin(), msg.str().end());
+ throw rti1516e::RTIinternalError(message);
+ }
+
+ // Read response(s) from the local RTIA until Message::TICK_REQUEST is
received.
+ while (1) {
+ try {
+ vers_Fed.reset(M_Factory::receive(privateRefs->socketUn));
+ }
+ catch (NetworkError &e) {
+ std::stringstream msg;
+ msg << "NetworkError in tick() while receiving response: " <<
e._reason;
+ std::wstring message(msg.str().begin(), msg.str().end());
+ throw rti1516e::RTIinternalError(message);
+ }
+
+ // If the type is TICK_REQUEST, the __tick_kernel() has terminated.
+ if (vers_Fed->getMessageType() == Message::TICK_REQUEST) {
+ if (vers_Fed->getExceptionType() != e_NO_EXCEPTION) {
+ // tick() may only throw exceptions defined in the HLA standard
+ // the RTIA is responsible for sending 'allowed' exceptions
only
+ privateRefs->processException(vers_Fed.get());
+ }
+ return static_cast<M_Tick_Request*>(vers_Fed.get())->getMultiple();
+ }
+
+ try {
+ // Otherwise, the RTI calls a FederateAmbassador service.
+ privateRefs->callFederateAmbassador(vers_Fed.get());
+ }
+ catch (RTIinternalError&) {
+ // RTIA awaits TICK_REQUEST_NEXT, terminate the tick() processing
+ privateRefs->sendTickRequestStop();
+ // ignore the response and re-throw the original exception
+ throw;
+ }
+
+ try {
+ // Request next callback from the RTIA
+ M_Tick_Request_Next tick_next;
+ tick_next.send(privateRefs->socketUn, privateRefs->msgBufSend);
+ }
+ catch (NetworkError &e) {
+ std::stringstream msg;
+ msg << "NetworkError in tick() while sending TICK_REQUEST_NEXT: "
<< e._reason;
+
+ std::wstring message(msg.str().begin(), msg.str().end());
+ throw rti1516e::RTIinternalError(message);
+ }
+ } // while(1)
+ // should never be reached, this is there for calming down static code
analysis
+ return false;
+}
+
+// 4.2
+void RTI1516ambassador::createFederationExecution
+(std::wstring const & federationExecutionName,
+ std::wstring const & fullPathNameToTheFDDfile,
+ std::wstring const & LogicalTimeImplementationName)
+throw (rti1516e::FederationExecutionAlreadyExists,
+ rti1516e::CouldNotOpenFDD,
+ rti1516e::ErrorReadingFDD,
+ rti1516e::CouldNotCreateLogicalTimeFactory,
+ rti1516e::RTIinternalError)
+ {
+ /* TODO */
+ certi::M_Create_Federation_Execution req, rep ;
+
+ G.Out(pdGendoc,"enter RTI1516ambassador::createFederationExecution");
+ std::string
federationExecutionNameAsString(federationExecutionName.begin(),
federationExecutionName.end());
+ req.setFederationName(federationExecutionNameAsString);
+
+ std::string
fullPathNameToTheFDDfileAsString(fullPathNameToTheFDDfile.begin(),
fullPathNameToTheFDDfile.end());
+ req.setFEDid(fullPathNameToTheFDDfileAsString);
+
+ /*#ifdef _WIN32
+ if(!stricmp(FED,executionName)) {
+ #else
+ if(!strcasecmp(FED,exeName)) {
+ #endif
+ }*/
+ G.Out(pdGendoc," ====>executeService
CREATE_FEDERATION_EXECUTION");
+
+ privateRefs->executeService(&req, &rep);
+
+ G.Out(pdGendoc,"exit RTI1516ambassador::createFederationExecution");
+
+ // TODO What to do with the 'logicalTimeImplementationName'? Can't find
it's use in SISO-STD-004.1-2004
+ // Only exists in C++ interface.
+ // Ignored for now.
+ }
+
+// 4.3
+void RTI1516ambassador::destroyFederationExecution
+(std::wstring const & federationExecutionName)
+throw (rti1516e::FederatesCurrentlyJoined,
+ rti1516e::FederationExecutionDoesNotExist,
+ rti1516e::RTIinternalError)
+ {
+ M_Destroy_Federation_Execution req, rep ;
+
+ G.Out(pdGendoc,"enter RTI1516ambassador::destroyFederationExecution");
+
+ std::string
federationExecutionNameAsString(federationExecutionName.begin(),
federationExecutionName.end());
+ req.setFederationName(federationExecutionNameAsString);
+
+ G.Out(pdGendoc," ====>executeService DESTROY_FEDERATION_EXECUTION");
+
+ privateRefs->executeService(&req, &rep);
+
+ G.Out(pdGendoc,"exit RTI1516ambassador::destroyFederationExecution");
+ }
+
+// 4.4
+rti1516e::FederateHandle RTI1516ambassador::joinFederationExecution
+(std::wstring const & federateType,
+ std::wstring const & federationExecutionName,
+ rti1516e::FederateAmbassador & federateAmbassador)
+throw (rti1516e::FederateAlreadyExecutionMember,
+ rti1516e::FederationExecutionDoesNotExist,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::CouldNotCreateLogicalTimeFactory,
+ rti1516e::RTIinternalError)
+ {
+ M_Join_Federation_Execution req, rep ;
+
+ G.Out(pdGendoc,"enter RTI1516ambassador::joinFederationExecution");
+
+ if ( &federateType == NULL || federateType.length() <= 0 ) {
+ throw rti1516e::RTIinternalError(L"Incorrect or empty federate name");
+ }
+ std::string federateTypeAsString(federateType.begin(), federateType.end());
+
+ if ( &federationExecutionName == NULL || federationExecutionName.length()
<= 0 )
+ throw rti1516e::RTIinternalError(L"Incorrect or empty federation
name");
+ std::string
federationExecutionNameAsString(federationExecutionName.begin(),
federationExecutionName.end());
+
+ privateRefs->fed_amb = &federateAmbassador ;
+
+ req.setFederateName(federateTypeAsString);
+ req.setFederationName(federationExecutionNameAsString);
+ G.Out(pdGendoc," ====>executeService JOIN_FEDERATION_EXECUTION");
+ privateRefs->executeService(&req, &rep);
+ G.Out(pdGendoc,"exit RTI1516ambassador::joinFederationExecution");
+ PrettyDebug::setFederateName(
"LibRTI::"+std::string(federateTypeAsString));
+
+ certi::FederateHandle certiFederateHandle = rep.getFederate();
+ rti1516e::FederateHandle rti1516FederateHandle =
rti1516e::FederateHandleFriend::createRTI1516Handle(certiFederateHandle);
+
+ return rti1516FederateHandle;
+ }
+
+// 4.5
+void RTI1516ambassador::resignFederationExecution
+(rti1516e::ResignAction resignAction)
+throw (rti1516e::OwnershipAcquisitionPending,
+ rti1516e::FederateOwnsAttributes,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::RTIinternalError)
+ {
+ M_Resign_Federation_Execution req, rep ;
+
+ G.Out(pdGendoc,"enter RTI1516ambassador::resignFederationExecution");
+ //req.setResignAction(static_cast<certi::ResignAction>(resignAction));
+ req.setResignAction(certi::DELETE_OBJECTS_AND_RELEASE_ATTRIBUTES);
+ G.Out(pdGendoc," ====>executeService RESIGN_FEDERATION_EXECUTION");
+ privateRefs->executeService(&req, &rep);
+ G.Out(pdGendoc,"exit RTI1516ambassador::resignFederationExecution");
+ }
+
+// 4.6
+void RTI1516ambassador::registerFederationSynchronizationPoint
+(std::wstring const & label,
+ rti1516e::VariableLengthData const & theUserSuppliedTag)
+throw (rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ M_Register_Federation_Synchronization_Point req, rep ;
+
+ G.Out(pdGendoc,"enter
RTI1516ambassador::registerFederationSynchronizationPoint for all federates");
+ std::string labelString(label.begin(), label.end());
+ req.setLabel(labelString);
+ // no federate set
+ req.setFederateSetSize(0);
+ if ( &theUserSuppliedTag == NULL || theUserSuppliedTag.data() == NULL )
+ {
+ throw rti1516e::RTIinternalError (L"Calling
registerFederationSynchronizationPoint with Tag NULL");
+ }
+ req.setTag(varLengthDataAsString(theUserSuppliedTag));
+ G.Out(pdGendoc," ====>executeService
REGISTER_FEDERATION_SYNCHRONIZATION_POINT");
+ privateRefs->executeService(&req, &rep);
+
+ G.Out(pdGendoc,"exit
RTI1516ambassador::registerFederationSynchronizationPoint for all federates");
+ }
+
+void RTI1516ambassador::registerFederationSynchronizationPoint
+(std::wstring const & label,
+ rti1516e::VariableLengthData const & theUserSuppliedTag,
+ rti1516e::FederateHandleSet const & syncSet)
+throw (rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ M_Register_Federation_Synchronization_Point req, rep ;
+
+ G.Out(pdGendoc,"enter
RTI1516ambassador::registerFederationSynchronizationPoint for some federates");
+
+ std::string labelString(label.begin(), label.end());
+ req.setLabel(labelString);
+ if ( &theUserSuppliedTag == NULL || theUserSuppliedTag.data() == NULL )
+ {
+ throw rti1516e::RTIinternalError (L"Calling
registerFederationSynchronizationPoint with Tag NULL");
+ }
+ req.setTag(varLengthDataAsString(theUserSuppliedTag));
+ // Federate set exists but if size=0 (set empty)
+ // We have to send the size even if federate set size is 0
+ // (HLA 1.3 compliance to inform ALL federates)
+
+ req.setFederateSetSize(syncSet.size());
+
+ uint32_t i = 0;
+ for ( rti1516e::FederateHandleSet::const_iterator it = syncSet.begin(); it
!= syncSet.end(); it++, ++i)
+ {
+
req.setFederateSet(rti1516e::FederateHandleFriend::toCertiHandle(*it),i);
+ }
+
+ G.Out(pdGendoc," ====>executeService
REGISTER_FEDERATION_SYNCHRONIZATION_POINT");
+ privateRefs->executeService(&req, &rep);
+
+ G.Out(pdGendoc,"exit
RTI1516ambassador::registerFederationSynchronizationPoint for some federates");
+ }
+
+// 4.9
+void RTI1516ambassador::synchronizationPointAchieved
+(std::wstring const & label)
+throw (rti1516e::SynchronizationPointLabelNotAnnounced,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ M_Synchronization_Point_Achieved req, rep ;
+
+ G.Out(pdGendoc,"enter RTI1516ambassador::synchronizationPointAchieved");
+
+ std::string labelString(label.begin(), label.end());
+ req.setLabel(labelString);
+
+ G.Out(pdGendoc," ====>executeService
SYNCHRONIZATION_POINT_ACHIEVED");
+ privateRefs->executeService(&req, &rep);
+
+ G.Out(pdGendoc,"exit RTI1516ambassador::synchronizationPointAchieved");
+ }
+
+// 4.11
+void RTI1516ambassador::requestFederationSave
+(std::wstring const & label)
+throw (rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ M_Request_Federation_Save req, rep ;
+
+ G.Out(pdGendoc,"enter RTI1516ambassador::requestFederationSave without
time");
+
+ std::string labelString(label.begin(), label.end());
+ req.setLabel(labelString);
+ G.Out(pdGendoc," ====>executeService REQUEST_FEDERATION_SAVE");
+
+ privateRefs->executeService(&req, &rep);
+ G.Out(pdGendoc,"exit RTI1516ambassador::requestFederationSave without
time");
+ }
+
+void RTI1516ambassador::requestFederationSave
+(std::wstring const & label,
+ rti1516e::LogicalTime const & theTime)
+throw (rti1516e::LogicalTimeAlreadyPassed,
+ rti1516e::InvalidLogicalTime,
+ rti1516e::FederateUnableToUseTime,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ M_Request_Federation_Save req, rep ;
+
+ G.Out(pdGendoc,"enter RTI1516ambassador::requestFederationSave with time");
+
+ certi::FederationTime
certiFedTime(certi_cast<RTI1516fedTime>()(theTime).getFedTime());
+ req.setDate(certiFedTime);
+
+ std::string labelString(label.begin(), label.end());
+ req.setLabel(labelString);
+
+ G.Out(pdGendoc," ====>executeService REQUEST_FEDERATION_SAVE");
+ privateRefs->executeService(&req, &rep);
+
+ G.Out(pdGendoc,"exit RTI1516ambassador::requestFederationSave with time");
+ }
+
+// 4.13
+void RTI1516ambassador::federateSaveBegun ()
+throw (rti1516e::SaveNotInitiated,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ M_Federate_Save_Begun req, rep ;
+
+ G.Out(pdGendoc,"enter RTI1516ambassador::federateSaveBegun");
+
+ G.Out(pdGendoc," ====>executeService FEDERATE_SAVE_BEGUN");
+ privateRefs->executeService(&req, &rep);
+
+ G.Out(pdGendoc,"exit RTI1516ambassador::federateSaveBegun");
+ }
+
+// 4.14
+void RTI1516ambassador::federateSaveComplete ()
+throw (rti1516e::FederateHasNotBegunSave,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ M_Federate_Save_Complete req, rep ;
+
+ G.Out(pdGendoc,"enter RTI1516ambassador::federateSaveComplete");
+ G.Out(pdGendoc," ====>executeService FEDERATE_SAVE_COMPLETE");
+ privateRefs->executeService(&req, &rep);
+ G.Out(pdGendoc,"exit RTI1516ambassador::federateSaveComplete");
+ }
+
+void RTI1516ambassador::federateSaveNotComplete()
+throw (rti1516e::FederateHasNotBegunSave,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ M_Federate_Save_Not_Complete req, rep ;
+
+ G.Out(pdGendoc,"enter RTI1516ambassador::federateSaveNotComplete");
+ G.Out(pdGendoc," ====>executeService FEDERATE_SAVE_NOT_COMPLETE");
+ privateRefs->executeService(&req, &rep);
+
+ G.Out(pdGendoc,"exit RTI1516ambassador::federateSaveNotComplete");
+ }
+
+// 4.16
+void RTI1516ambassador::queryFederationSaveStatus ()
+throw (rti1516e::FederateNotExecutionMember,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ /* TODO */
+ throw rti1516e::RTIinternalError(L"Not yet implemented");
+ }
+
+// 4.18
+void RTI1516ambassador::requestFederationRestore
+(std::wstring const & label)
+throw (rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ M_Request_Federation_Restore req, rep ;
+
+ G.Out(pdGendoc,"enter RTI1516ambassador::requestFederationRestore");
+ std::string labelString(label.begin(), label.end());
+ req.setLabel(labelString);
+ G.Out(pdGendoc," ====>executeService REQUEST_FEDERATION_RESTORE");
+ privateRefs->executeService(&req, &rep);
+ G.Out(pdGendoc,"exit RTI1516ambassador::requestFederationRestore");
+ }
+
+// 4.22
+void RTI1516ambassador::federateRestoreComplete ()
+throw (rti1516e::RestoreNotRequested,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RTIinternalError)
+ {
+ M_Federate_Restore_Complete req, rep ;
+
+ G.Out(pdGendoc,"enter RTI1516ambassador::federateRestoreComplete");
+
+ G.Out(pdGendoc," ====>executeService FEDERATE_RESTORE_COMPLETE");
+ privateRefs->executeService(&req, &rep);
+ G.Out(pdGendoc,"exit RTI1516ambassador::federateRestoreComplete");
+ }
+
+void RTI1516ambassador::federateRestoreNotComplete ()
+throw (rti1516e::RestoreNotRequested,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RTIinternalError)
+ {
+ M_Federate_Restore_Not_Complete req, rep ;
+
+ G.Out(pdGendoc,"enter RTI1516ambassador::federateRestoreNotComplete");
+ G.Out(pdGendoc," ====>executeService FEDERATE_RESTORE_NOT_COMPLETE");
+
+ privateRefs->executeService(&req, &rep);
+ G.Out(pdGendoc,"exit RTI1516ambassador::federateRestoreNotComplete");
+ }
+
+// 4.24
+void RTI1516ambassador::queryFederationRestoreStatus ()
+throw (rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RTIinternalError)
+ {
+ /* TODO */
+ throw rti1516e::RTIinternalError(L"Not yet implemented");
+ }
+
+/////////////////////////////////////
+// Declaration Management Services //
+/////////////////////////////////////
+
+// 5.2
+void RTI1516ambassador::publishObjectClassAttributes
+(rti1516e::ObjectClassHandle theClass,
+ rti1516e::AttributeHandleSet const & attributeList)
+throw (rti1516e::ObjectClassNotDefined,
+ rti1516e::AttributeNotDefined,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ M_Publish_Object_Class req, rep ;
+ G.Out(pdGendoc,"enter RTI1516ambassador::publishObjectClass");
+
+ const certi::ObjectClassHandle objectClassHandle =
rti1516e::ObjectClassHandleFriend::toCertiHandle(theClass);
+ req.setObjectClass(objectClassHandle);
+
+ req.setAttributesSize(attributeList.size());
+ uint32_t i = 0;
+ for ( rti1516e::AttributeHandleSet::const_iterator it =
attributeList.begin(); it != attributeList.end(); it++, ++i)
+ {
+
req.setAttributes(rti1516e::AttributeHandleFriend::toCertiHandle(*it),i);
+ }
+ G.Out(pdGendoc," ====>executeService PUBLISH_OBJECT_CLASS");
+ privateRefs->executeService(&req, &rep);
+ G.Out(pdGendoc,"exit RTI1516ambassador::publishObjectClass");
+ }
+
+// 5.3
+void RTI1516ambassador::unpublishObjectClass
+(rti1516e::ObjectClassHandle theClass)
+throw (rti1516e::ObjectClassNotDefined,
+ rti1516e::OwnershipAcquisitionPending,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ M_Unpublish_Object_Class req, rep ;
+ G.Out(pdGendoc,"enter RTI1516ambassador::unpublishObjectClass");
+
+ const certi::ObjectClassHandle objectClassHandle =
rti1516e::ObjectClassHandleFriend::toCertiHandle(theClass);
+ req.setObjectClass(objectClassHandle);
+ G.Out(pdGendoc," ====>executeService UNPUBLISH_OBJECT_CLASS");
+ privateRefs->executeService(&req, &rep);
+ G.Out(pdGendoc,"exit RTI1516ambassador::unpublishObjectClass");
+ }
+
+void RTI1516ambassador::unpublishObjectClassAttributes
+(rti1516e::ObjectClassHandle theClass,
+ rti1516e::AttributeHandleSet const & attributeList)
+throw (rti1516e::ObjectClassNotDefined,
+ rti1516e::AttributeNotDefined,
+ rti1516e::OwnershipAcquisitionPending,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ /* TODO */
+ throw rti1516e::RTIinternalError(L"Not yet implemented");
+ }
+
+// 5.4
+void RTI1516ambassador::publishInteractionClass
+(rti1516e::InteractionClassHandle theInteraction)
+throw (rti1516e::InteractionClassNotDefined,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ M_Publish_Interaction_Class req, rep ;
+ const certi::InteractionClassHandle classHandle =
rti1516e::InteractionClassHandleFriend::toCertiHandle(theInteraction);
+ req.setInteractionClass(classHandle);
+ G.Out(pdGendoc," ====>executeService PUBLISH_INTERACTION_CLASS");
+ privateRefs->executeService(&req, &rep);
+ }
+
+// 5.5
+void RTI1516ambassador::unpublishInteractionClass
+(rti1516e::InteractionClassHandle theInteraction)
+throw (rti1516e::InteractionClassNotDefined,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ M_Unpublish_Interaction_Class req, rep ;
+ const certi::InteractionClassHandle classHandle =
rti1516e::InteractionClassHandleFriend::toCertiHandle(theInteraction);
+ req.setInteractionClass(classHandle);
+
+ privateRefs->executeService(&req, &rep);
+ }
+
+// 5.6
+void RTI1516ambassador::subscribeObjectClassAttributes
+(rti1516e::ObjectClassHandle theClass,
+ rti1516e::AttributeHandleSet const & attributeList,
+ bool active)
+throw (rti1516e::ObjectClassNotDefined,
+ rti1516e::AttributeNotDefined,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ M_Subscribe_Object_Class_Attributes req, rep ;
+ G.Out(pdGendoc,"enter RTI1516ambassador::subscribeObjectClassAttributes");
+
+ const certi::ObjectClassHandle objectClassHandle =
rti1516e::ObjectClassHandleFriend::toCertiHandle(theClass);
+ req.setObjectClass(objectClassHandle);
+
+ req.setAttributesSize(attributeList.size());
+ uint32_t i = 0;
+ for ( rti1516e::AttributeHandleSet::const_iterator it =
attributeList.begin(); it != attributeList.end(); it++, ++i)
+ {
+
req.setAttributes(rti1516e::AttributeHandleFriend::toCertiHandle(*it),i);
+ }
+ req.setActive(active);
+
+ privateRefs->executeService(&req, &rep);
+ G.Out(pdGendoc,"exit RTI1516ambassador::subscribeObjectClassAttributes");
+ }
+
+// 5.7
+void RTI1516ambassador::unsubscribeObjectClass
+(rti1516e::ObjectClassHandle theClass)
+throw (rti1516e::ObjectClassNotDefined,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ M_Unsubscribe_Object_Class req, rep ;
+
+ const certi::ObjectClassHandle objectClassHandle =
rti1516e::ObjectClassHandleFriend::toCertiHandle(theClass);
+ req.setObjectClass(objectClassHandle);
+
+ privateRefs->executeService(&req, &rep);
+ }
+
+void RTI1516ambassador::unsubscribeObjectClassAttributes
+(rti1516e::ObjectClassHandle theClass,
+ rti1516e::AttributeHandleSet const & attributeList)
+throw (rti1516e::ObjectClassNotDefined,
+ rti1516e::AttributeNotDefined,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ /* TODO */
+ throw rti1516e::RTIinternalError(L"Not yet implemented");
+ }
+
+// 5.8
+void RTI1516ambassador::subscribeInteractionClass
+(rti1516e::InteractionClassHandle theClass,
+ bool active)
+throw (rti1516e::InteractionClassNotDefined,
+ rti1516e::FederateServiceInvocationsAreBeingReportedViaMOM,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ M_Subscribe_Interaction_Class req, rep ;
+ const certi::InteractionClassHandle classHandle =
rti1516e::InteractionClassHandleFriend::toCertiHandle(theClass);
+ req.setInteractionClass(classHandle);
+
+ privateRefs->executeService(&req, &rep);
+ }
+
+// 5.9
+void RTI1516ambassador::unsubscribeInteractionClass
+(rti1516e::InteractionClassHandle theClass)
+throw (rti1516e::InteractionClassNotDefined,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ M_Unsubscribe_Interaction_Class req, rep ;
+
+ const certi::InteractionClassHandle classHandle =
rti1516e::InteractionClassHandleFriend::toCertiHandle(theClass);
+ req.setInteractionClass(classHandle);
+
+ privateRefs->executeService(&req, &rep);
+ }
+
+////////////////////////////////
+// Object Management Services //
+////////////////////////////////
+
+// 6.2
+void RTI1516ambassador::reserveObjectInstanceName
+(std::wstring const & theObjectInstanceName)
+throw (rti1516e::IllegalName,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ M_Reserve_Object_Instance_Name req, rep;
+
+ std::string objInstanceName(theObjectInstanceName.begin(),
theObjectInstanceName.end());
+ req.setObjectName(objInstanceName);
+ privateRefs->executeService(&req, &rep);
+ }
+
+// 6.4
+rti1516e::ObjectInstanceHandle RTI1516ambassador::registerObjectInstance
+(rti1516e::ObjectClassHandle theClass)
+throw (rti1516e::ObjectClassNotDefined,
+ rti1516e::ObjectClassNotPublished,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ M_Register_Object_Instance req, rep ;
+
+
req.setObjectClass(rti1516e::ObjectClassHandleFriend::toCertiHandle(theClass));
+ privateRefs->executeService(&req, &rep);
+ return
rti1516e::ObjectInstanceHandleFriend::createRTI1516Handle(rep.getObject());
+ }
+
+rti1516e::ObjectInstanceHandle RTI1516ambassador::registerObjectInstance
+(rti1516e::ObjectClassHandle theClass,
+ std::wstring const & theObjectInstanceName)
+throw (rti1516e::ObjectClassNotDefined,
+ rti1516e::ObjectClassNotPublished,
+ rti1516e::ObjectInstanceNameNotReserved,
+ rti1516e::ObjectInstanceNameInUse,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ M_Register_Object_Instance req, rep ;
+
+ std::string nameString(theObjectInstanceName.begin(),
theObjectInstanceName.end());
+ req.setObjectName(nameString);
+
req.setObjectClass(rti1516e::ObjectClassHandleFriend::toCertiHandle(theClass));
+ privateRefs->executeService(&req, &rep);
+
+ return
rti1516e::ObjectInstanceHandleFriend::createRTI1516Handle(rep.getObject());
+ }
+
+// 6.6
+void RTI1516ambassador::updateAttributeValues
+(rti1516e::ObjectInstanceHandle theObject,
+ rti1516e::AttributeHandleValueMap const & theAttributeValues,
+ rti1516e::VariableLengthData const & theUserSuppliedTag)
+throw (rti1516e::ObjectInstanceNotKnown,
+ rti1516e::AttributeNotDefined,
+ rti1516e::AttributeNotOwned,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ G.Out(pdGendoc,"enter RTI1516ambassador::updateAttributeValues without
time");
+ M_Update_Attribute_Values req, rep ;
+
+
req.setObject(rti1516e::ObjectInstanceHandleFriend::toCertiHandle(theObject));
+ if ( &theUserSuppliedTag == NULL || theUserSuppliedTag.data() == NULL)
+ {
+ throw rti1516e::RTIinternalError(L"Calling updateAttributeValues with
Tag NULL");
+ }
+
+ req.setTag(varLengthDataAsString(theUserSuppliedTag));
+
+ assignAHVMAndExecuteService(theAttributeValues, req, rep);
+
+ G.Out(pdGendoc,"exit RTI1516ambassador::updateAttributeValues without
time");
+ }
+
+rti1516e::MessageRetractionHandle RTI1516ambassador::updateAttributeValues
+(rti1516e::ObjectInstanceHandle theObject,
+ rti1516e::AttributeHandleValueMap const & theAttributeValues,
+ rti1516e::VariableLengthData const & theUserSuppliedTag,
+ rti1516e::LogicalTime const & theTime)
+throw (rti1516e::ObjectInstanceNotKnown,
+ rti1516e::AttributeNotDefined,
+ rti1516e::AttributeNotOwned,
+ rti1516e::InvalidLogicalTime,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ G.Out(pdGendoc,"enter RTI1516ambassador::updateAttributeValues with time");
+ M_Update_Attribute_Values req, rep ;
+
+
req.setObject(rti1516e::ObjectInstanceHandleFriend::toCertiHandle(theObject));
+
+ certi::FederationTime
certiFedTime(certi_cast<RTI1516fedTime>()(theTime).getFedTime());
+ req.setDate(certiFedTime);
+
+ if ( &theUserSuppliedTag == NULL || theUserSuppliedTag.data() == NULL)
+ {
+ throw rti1516e::RTIinternalError(L"Calling updateAttributeValues with
Tag NULL");
+ }
+
+ req.setTag(varLengthDataAsString(theUserSuppliedTag));
+
+ assignAHVMAndExecuteService(theAttributeValues, req, rep);
+
+ G.Out(pdGendoc,"return RTI1516ambassador::updateAttributeValues with
time");
+ certi::FederateHandle certiHandle =
rep.getEventRetraction().getSendingFederate();
+ uint64_t serialNum = rep.getEventRetraction().getSN();
+ return
rti1516e::MessageRetractionHandleFriend::createRTI1516Handle(certiHandle,
serialNum);
+ }
+
+// 6.8
+void RTI1516ambassador::sendInteraction
+(rti1516e::InteractionClassHandle theInteraction,
+ rti1516e::ParameterHandleValueMap const & theParameterValues,
+ rti1516e::VariableLengthData const & theUserSuppliedTag)
+throw (rti1516e::InteractionClassNotPublished,
+ rti1516e::InteractionClassNotDefined,
+ rti1516e::InteractionParameterNotDefined,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ M_Send_Interaction req, rep ;
+
+ const certi::InteractionClassHandle classHandle =
rti1516e::InteractionClassHandleFriend::toCertiHandle(theInteraction);
+ req.setInteractionClass(classHandle);
+
+ if (&theUserSuppliedTag == NULL || theUserSuppliedTag.data() == NULL )
+ {
+ throw rti1516e::RTIinternalError (L"Calling sendIntercation with Tag
NULL") ;
+ }
+
+ req.setTag(varLengthDataAsString(theUserSuppliedTag));
+ req.setRegion(0);
+
+ assignPHVMAndExecuteService(theParameterValues, req, rep);
+ }
+
+rti1516e::MessageRetractionHandle RTI1516ambassador::sendInteraction
+(rti1516e::InteractionClassHandle theInteraction,
+ rti1516e::ParameterHandleValueMap const & theParameterValues,
+ rti1516e::VariableLengthData const & theUserSuppliedTag,
+ rti1516e::LogicalTime const & theTime)
+throw (rti1516e::InteractionClassNotPublished,
+ rti1516e::InteractionClassNotDefined,
+ rti1516e::InteractionParameterNotDefined,
+ rti1516e::InvalidLogicalTime,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ M_Send_Interaction req, rep ;
+
+ const certi::InteractionClassHandle classHandle =
rti1516e::InteractionClassHandleFriend::toCertiHandle(theInteraction);
+ req.setInteractionClass(classHandle);
+
+ certi::FederationTime
certiFedTime(certi_cast<RTI1516fedTime>()(theTime).getFedTime());
+ req.setDate(certiFedTime);
+
+ if (&theUserSuppliedTag == NULL || theUserSuppliedTag.data() == NULL ) {
+ throw rti1516e::RTIinternalError(L"Calling sendInteraction with Tag
NULL") ;
+ }
+
+ req.setTag(varLengthDataAsString(theUserSuppliedTag));
+ req.setRegion(0);
+
+ assignPHVMAndExecuteService(theParameterValues, req, rep);
+
+ certi::FederateHandle certiHandle =
rep.getEventRetraction().getSendingFederate();
+ uint64_t serialNr = rep.getEventRetraction().getSN();
+ rti1516e::MessageRetractionHandle rti1516handle =
rti1516e::MessageRetractionHandleFriend::createRTI1516Handle(certiHandle,
serialNr);
+
+ return rti1516handle;
+ }
+
+// 6.10
+void RTI1516ambassador::deleteObjectInstance
+(rti1516e::ObjectInstanceHandle theObject,
+ rti1516e::VariableLengthData const & theUserSuppliedTag)
+throw (rti1516e::DeletePrivilegeNotHeld,
+ rti1516e::ObjectInstanceNotKnown,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ M_Delete_Object_Instance req, rep ;
+
+
req.setObject(rti1516e::ObjectInstanceHandleFriend::toCertiHandle(theObject));
+ if ( &theUserSuppliedTag == NULL || theUserSuppliedTag.data() == NULL)
+ {
+ throw rti1516e::RTIinternalError(L"Calling deleteObjectInstance with
Tag NULL") ;
+ }
+
+ req.setTag(varLengthDataAsString(theUserSuppliedTag));
+
+ privateRefs->executeService(&req, &rep);
+ }
+
+rti1516e::MessageRetractionHandle RTI1516ambassador::deleteObjectInstance
+(rti1516e::ObjectInstanceHandle theObject,
+ rti1516e::VariableLengthData const & theUserSuppliedTag,
+ rti1516e::LogicalTime const & theTime)
+throw (rti1516e::DeletePrivilegeNotHeld,
+ rti1516e::ObjectInstanceNotKnown,
+ rti1516e::InvalidLogicalTime,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ M_Delete_Object_Instance req, rep ;
+
+
req.setObject(rti1516e::ObjectInstanceHandleFriend::toCertiHandle(theObject));
+
+ certi::FederationTime
certiFedTime(certi_cast<RTI1516fedTime>()(theTime).getFedTime());
+ req.setDate(certiFedTime);
+
+ if ( &theUserSuppliedTag == NULL || theUserSuppliedTag.data() == NULL)
+ {
+ throw rti1516e::RTIinternalError(L"Calling deleteObjectInstance with
Tag NULL") ;
+ }
+
+ req.setTag(varLengthDataAsString(theUserSuppliedTag));
+
+ privateRefs->executeService(&req, &rep);
+
+ certi::FederateHandle certiHandle =
rep.getEventRetraction().getSendingFederate();
+ uint64_t serialNum = rep.getEventRetraction().getSN();
+ return
rti1516e::MessageRetractionHandleFriend::createRTI1516Handle(certiHandle,
serialNum);
+ }
+
+// 6.12
+void RTI1516ambassador::localDeleteObjectInstance
+(rti1516e::ObjectInstanceHandle theObject)
+throw (rti1516e::ObjectInstanceNotKnown,
+ rti1516e::FederateOwnsAttributes,
+ rti1516e::OwnershipAcquisitionPending,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ throw rti1516e::RTIinternalError(L"unimplemented service
localDeleteObjectInstance");
+ M_Local_Delete_Object_Instance req, rep ;
+
+
req.setObject(rti1516e::ObjectInstanceHandleFriend::toCertiHandle(theObject));
+ privateRefs->executeService(&req, &rep);
+ }
+
+// 6.13
+void RTI1516ambassador::changeAttributeTransportationType
+(rti1516e::ObjectInstanceHandle theObject,
+ rti1516e::AttributeHandleSet const & theAttributes,
+ rti1516e::TransportationType theType)
+throw (rti1516e::ObjectInstanceNotKnown,
+ rti1516e::AttributeNotDefined,
+ rti1516e::AttributeNotOwned,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ M_Change_Attribute_Transportation_Type req, rep ;
+
req.setObject(rti1516e::ObjectInstanceHandleFriend::toCertiHandle(theObject));
+ req.setTransportationType(toCertiTransportationType(theType));
+
+ req.setAttributesSize(theAttributes.size());
+ uint32_t i = 0;
+ for ( rti1516e::AttributeHandleSet::const_iterator it =
theAttributes.begin(); it != theAttributes.end(); it++, ++i)
+ {
+
req.setAttributes(rti1516e::AttributeHandleFriend::toCertiHandle(*it),i);
+ }
+
+ privateRefs->executeService(&req, &rep);
+ }
+
+// 6.14
+void RTI1516ambassador::changeInteractionTransportationType
+(rti1516e::InteractionClassHandle theClass,
+ rti1516e::TransportationType theType)
+throw (rti1516e::InteractionClassNotDefined,
+ rti1516e::InteractionClassNotPublished,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ M_Change_Interaction_Transportation_Type req, rep ;
+
+
req.setInteractionClass(rti1516e::InteractionClassHandleFriend::toCertiHandle(theClass));
+ req.setTransportationType(toCertiTransportationType(theType));
+
+ privateRefs->executeService(&req, &rep);
+ }
+
+// 6.17
+void RTI1516ambassador::requestAttributeValueUpdate
+(rti1516e::ObjectInstanceHandle theObject,
+ rti1516e::AttributeHandleSet const & theAttributes,
+ rti1516e::VariableLengthData const & theUserSuppliedTag)
+throw (rti1516e::ObjectInstanceNotKnown,
+ rti1516e::AttributeNotDefined,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ M_Request_Object_Attribute_Value_Update req, rep ;
+
+ G.Out(pdGendoc,"enter
RTI1516ambassador::requestObjectAttributeValueUpdate");
+
req.setObject(rti1516e::ObjectInstanceHandleFriend::toCertiHandle(theObject));
+
+ size_t attr_num = theAttributes.size();
+ req.setAttributesSize( attr_num );
+ uint32_t i = 0;
+ for ( rti1516e::AttributeHandleSet::const_iterator it =
theAttributes.begin(); i < attr_num; ++it, ++i)
+ {
+
req.setAttributes(rti1516e::AttributeHandleFriend::toCertiHandle(*it),i);
+ }
+ req.setTag(varLengthDataAsString(theUserSuppliedTag));
+
+ privateRefs->executeService(&req, &rep);
+ G.Out(pdGendoc,"exit
RTI1516ambassador::requestObjectAttributeValueUpdate");
+ }
+
+void RTI1516ambassador::requestAttributeValueUpdate
+(rti1516e::ObjectClassHandle theClass,
+ rti1516e::AttributeHandleSet const & theAttributes,
+ rti1516e::VariableLengthData const & theUserSuppliedTag)
+throw (rti1516e::ObjectClassNotDefined,
+ rti1516e::AttributeNotDefined,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ M_Request_Class_Attribute_Value_Update req, rep ;
+ G.Out(pdGendoc,"enter
RTI1516ambassador::requestClassAttributeValueUpdate");
+
req.setObjectClass(rti1516e::ObjectClassHandleFriend::toCertiHandle(theClass));
+
+ assignAHSAndExecuteService(theAttributes, req, rep);
+
+ G.Out(pdGendoc,"exit RTI1516ambassador::requestClassAttributeValueUpdate");
+ }
+
+///////////////////////////////////
+// Ownership Management Services //
+///////////////////////////////////
+// 7.2
+void RTI1516ambassador::unconditionalAttributeOwnershipDivestiture
+(rti1516e::ObjectInstanceHandle theObject,
+ rti1516e::AttributeHandleSet const & theAttributes)
+throw (rti1516e::ObjectInstanceNotKnown,
+ rti1516e::AttributeNotDefined,
+ rti1516e::AttributeNotOwned,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ M_Unconditional_Attribute_Ownership_Divestiture req, rep ;
+
req.setObject(rti1516e::ObjectInstanceHandleFriend::toCertiHandle(theObject));
+
+ req.setAttributesSize(theAttributes.size());
+ uint32_t i=0;
+ for ( rti1516e::AttributeHandleSet::const_iterator it =
theAttributes.begin(); it != theAttributes.end(); it++, ++i)
+ {
+
req.setAttributes(rti1516e::AttributeHandleFriend::toCertiHandle(*it),i);
+ }
+
+ privateRefs->executeService(&req, &rep);
+ }
+
+// 7.3
+void RTI1516ambassador::negotiatedAttributeOwnershipDivestiture
+(rti1516e::ObjectInstanceHandle theObject,
+ rti1516e::AttributeHandleSet const & theAttributes,
+ rti1516e::VariableLengthData const & theUserSuppliedTag)
+throw (rti1516e::ObjectInstanceNotKnown,
+ rti1516e::AttributeNotDefined,
+ rti1516e::AttributeNotOwned,
+ rti1516e::AttributeAlreadyBeingDivested,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ M_Negotiated_Attribute_Ownership_Divestiture req, rep ;
+
req.setObject(rti1516e::ObjectInstanceHandleFriend::toCertiHandle(theObject));
+ if (&theUserSuppliedTag == NULL || theUserSuppliedTag.data() == NULL) {
+ throw rti1516e::RTIinternalError (L"Calling
negotiatedAttributeOwnershipDivestiture with Tag NULL") ;
+ }
+ req.setTag(certi::varLengthDataAsString(theUserSuppliedTag));
+
+ req.setAttributesSize(theAttributes.size());
+ uint32_t i=0;
+ for ( rti1516e::AttributeHandleSet::const_iterator it =
theAttributes.begin(); it != theAttributes.end(); it++, ++i)
+ {
+
req.setAttributes(rti1516e::AttributeHandleFriend::toCertiHandle(*it),i);
+ }
+
+ privateRefs->executeService(&req, &rep);
+ }
+
+// 7.6
+void RTI1516ambassador::confirmDivestiture
+(rti1516e::ObjectInstanceHandle theObject,
+ rti1516e::AttributeHandleSet const & confirmedAttributes,
+ rti1516e::VariableLengthData const & theUserSuppliedTag)
+throw (rti1516e::ObjectInstanceNotKnown,
+ rti1516e::AttributeNotDefined,
+ rti1516e::AttributeNotOwned,
+ rti1516e::AttributeDivestitureWasNotRequested,
+ rti1516e::NoAcquisitionPending,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ /* TODO */
+ throw rti1516e::RTIinternalError(L"Not yet implemented");
+ }
+
+// 7.8
+void RTI1516ambassador::attributeOwnershipAcquisition
+(rti1516e::ObjectInstanceHandle theObject,
+ rti1516e::AttributeHandleSet const & desiredAttributes,
+ rti1516e::VariableLengthData const & theUserSuppliedTag)
+throw (rti1516e::ObjectInstanceNotKnown,
+ rti1516e::ObjectClassNotPublished,
+ rti1516e::AttributeNotDefined,
+ rti1516e::AttributeNotPublished,
+ rti1516e::FederateOwnsAttributes,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ M_Attribute_Ownership_Acquisition req, rep ;
+
+
req.setObject(rti1516e::ObjectInstanceHandleFriend::toCertiHandle(theObject));
+ if (&theUserSuppliedTag == NULL || theUserSuppliedTag.data() == NULL )
+ {
+ throw rti1516e::RTIinternalError (L"Calling
attributeOwnershipAcquisition with Tag NULL") ;
+ }
+ req.setTag(certi::varLengthDataAsString(theUserSuppliedTag));
+
+ req.setAttributesSize(desiredAttributes.size());
+ uint32_t i = 0;
+ for ( rti1516e::AttributeHandleSet::const_iterator it =
desiredAttributes.begin(); it != desiredAttributes.end(); it++, ++i)
+ {
+
req.setAttributes(rti1516e::AttributeHandleFriend::toCertiHandle(*it),i);
+ }
+
+ privateRefs->executeService(&req, &rep);
+ }
+
+// 7.9
+void RTI1516ambassador::attributeOwnershipAcquisitionIfAvailable
+(rti1516e::ObjectInstanceHandle theObject,
+ rti1516e::AttributeHandleSet const & desiredAttributes)
+throw (rti1516e::ObjectInstanceNotKnown,
+ rti1516e::ObjectClassNotPublished,
+ rti1516e::AttributeNotDefined,
+ rti1516e::AttributeNotPublished,
+ rti1516e::FederateOwnsAttributes,
+ rti1516e::AttributeAlreadyBeingAcquired,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ M_Attribute_Ownership_Acquisition_If_Available req, rep ;
+
+
req.setObject(rti1516e::ObjectInstanceHandleFriend::toCertiHandle(theObject));
+
+ req.setAttributesSize(desiredAttributes.size());
+ uint32_t i = 0;
+ for ( rti1516e::AttributeHandleSet::const_iterator it =
desiredAttributes.begin(); it != desiredAttributes.end(); it++, ++i)
+ {
+
req.setAttributes(rti1516e::AttributeHandleFriend::toCertiHandle(*it),i);
+ }
+
+ privateRefs->executeService(&req, &rep);
+ }
+
+// 7.12 (in RTI1.3 this function is called: AttributeOwnershipReleaseResponse)
+void RTI1516ambassador::attributeOwnershipDivestitureIfWanted
+(rti1516e::ObjectInstanceHandle theObject,
+ rti1516e::AttributeHandleSet const & theAttributes,
+ rti1516e::AttributeHandleSet & theDivestedAttributes) // filled by RTI
+throw (rti1516e::ObjectInstanceNotKnown,
+ rti1516e::AttributeNotDefined,
+ rti1516e::AttributeNotOwned,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ M_Attribute_Ownership_Release_Response req, rep ;
+
+
req.setObject(rti1516e::ObjectInstanceHandleFriend::toCertiHandle(theObject));
+
+ assignAHSAndExecuteService(theAttributes, req, rep);
+
+ if (rep.getExceptionType() == e_NO_EXCEPTION) {
+ theDivestedAttributes.clear();
+ for (uint32_t i=0;i<rep.getAttributesSize();++i) {
+
theDivestedAttributes.insert(rti1516e::AttributeHandleFriend::createRTI1516Handle(rep.getAttributes()[i]));
+ }
+ }
+
+ }
+
+// 7.13
+void RTI1516ambassador::cancelNegotiatedAttributeOwnershipDivestiture
+(rti1516e::ObjectInstanceHandle theObject,
+ rti1516e::AttributeHandleSet const & theAttributes)
+throw (rti1516e::ObjectInstanceNotKnown,
+ rti1516e::AttributeNotDefined,
+ rti1516e::AttributeNotOwned,
+ rti1516e::AttributeDivestitureWasNotRequested,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ M_Cancel_Negotiated_Attribute_Ownership_Divestiture req, rep ;
+
+
req.setObject(rti1516e::ObjectInstanceHandleFriend::toCertiHandle(theObject));
+
+ req.setAttributesSize(theAttributes.size());
+ uint32_t i = 0;
+ for ( rti1516e::AttributeHandleSet::const_iterator it =
theAttributes.begin(); it != theAttributes.end(); it++, ++i)
+ {
+
req.setAttributes(rti1516e::AttributeHandleFriend::toCertiHandle(*it),i);
+ }
+
+ privateRefs->executeService(&req, &rep);
+ }
+
+// 7.14
+void RTI1516ambassador::cancelAttributeOwnershipAcquisition
+(rti1516e::ObjectInstanceHandle theObject,
+ rti1516e::AttributeHandleSet const & theAttributes)
+throw (rti1516e::ObjectInstanceNotKnown,
+ rti1516e::AttributeNotDefined,
+ rti1516e::AttributeAlreadyOwned,
+ rti1516e::AttributeAcquisitionWasNotRequested,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ M_Cancel_Attribute_Ownership_Acquisition req, rep ;
+
+
req.setObject(rti1516e::ObjectInstanceHandleFriend::toCertiHandle(theObject));
+
+ req.setAttributesSize(theAttributes.size());
+ uint32_t i = 0;
+ for ( rti1516e::AttributeHandleSet::const_iterator it =
theAttributes.begin(); it != theAttributes.end(); it++, ++i)
+ {
+
req.setAttributes(rti1516e::AttributeHandleFriend::toCertiHandle(*it),i);
+ }
+
+ privateRefs->executeService(&req, &rep);
+ }
+
+// 7.16
+void RTI1516ambassador::queryAttributeOwnership
+(rti1516e::ObjectInstanceHandle theObject,
+ rti1516e::AttributeHandle theAttribute)
+throw (rti1516e::ObjectInstanceNotKnown,
+ rti1516e::AttributeNotDefined,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ M_Query_Attribute_Ownership req, rep ;
+
+
req.setObject(rti1516e::ObjectInstanceHandleFriend::toCertiHandle(theObject));
+
req.setAttribute(rti1516e::AttributeHandleFriend::toCertiHandle(theAttribute));
+
+ privateRefs->executeService(&req, &rep);
+ }
+
+// 7.18
+bool RTI1516ambassador::isAttributeOwnedByFederate
+(rti1516e::ObjectInstanceHandle theObject,
+ rti1516e::AttributeHandle theAttribute)
+throw (rti1516e::ObjectInstanceNotKnown,
+ rti1516e::AttributeNotDefined,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ M_Is_Attribute_Owned_By_Federate req, rep ;
+
+
req.setObject(rti1516e::ObjectInstanceHandleFriend::toCertiHandle(theObject));
+
req.setAttribute(rti1516e::AttributeHandleFriend::toCertiHandle(theAttribute));
+
+ privateRefs->executeService(&req, &rep);
+
+ return (rep.getTag() == "RTI_TRUE") ? true : false;
+ }
+
+//////////////////////////////
+// Time Management Services //
+//////////////////////////////
+
+// 8.2
+void RTI1516ambassador::enableTimeRegulation
+(rti1516e::LogicalTimeInterval const & theLookahead)
+throw (rti1516e::TimeRegulationAlreadyEnabled,
+ rti1516e::InvalidLookahead,
+ rti1516e::InTimeAdvancingState,
+ rti1516e::RequestForTimeRegulationPending,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ M_Enable_Time_Regulation req, rep ;
+
+ //req.setDate(certi_cast<RTIfedTime>()(theFederateTime).getTime());
//JRE: DATE IS NOT USED!
+
+ //JRE: is dit wel goed?
+ //JvY: TODO Controleren of dit blijft werken met andere tijdsimplementaties
+ union ud {
+ double dv;
+ uint64_t uv;
+ } value;
+#ifdef HOST_IS_BIG_ENDIAN
+ memcpy(&(value.uv), theLookahead.encode().data(), sizeof(double));
+#else
+ value.uv = CERTI_DECODE_DOUBLE_FROM_UINT64BE(theLookahead.encode().data());
+#endif
+ double lookAheadTime = value.dv;
+ req.setLookahead(lookAheadTime);
+ privateRefs->executeService(&req, &rep);
+ }
+
+// 8.4
+void RTI1516ambassador::disableTimeRegulation ()
+throw (rti1516e::TimeRegulationIsNotEnabled,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ M_Disable_Time_Regulation req, rep ;
+
+ privateRefs->executeService(&req, &rep);
+ }
+
+// 8.5
+void RTI1516ambassador::enableTimeConstrained ()
+throw (rti1516e::TimeConstrainedAlreadyEnabled,
+ rti1516e::InTimeAdvancingState,
+ rti1516e::RequestForTimeConstrainedPending,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ M_Enable_Time_Constrained req, rep ;
+ privateRefs->executeService(&req, &rep);
+ }
+
+// 8.7
+void RTI1516ambassador::disableTimeConstrained ()
+throw (rti1516e::TimeConstrainedIsNotEnabled,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ M_Disable_Time_Constrained req, rep ;
+ privateRefs->executeService(&req, &rep);
+ }
+
+// 8.8
+void RTI1516ambassador::timeAdvanceRequest
+(rti1516e::LogicalTime const & theTime)
+throw (rti1516e::InvalidLogicalTime,
+ rti1516e::LogicalTimeAlreadyPassed,
+ rti1516e::InTimeAdvancingState,
+ rti1516e::RequestForTimeRegulationPending,
+ rti1516e::RequestForTimeConstrainedPending,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ M_Time_Advance_Request req, rep ;
+
+ certi::FederationTime
certiFedTime(certi_cast<RTI1516fedTime>()(theTime).getFedTime());
+ req.setDate(certiFedTime);
+ privateRefs->executeService(&req, &rep);
+ }
+
+// 8.9
+void RTI1516ambassador::timeAdvanceRequestAvailable
+(rti1516e::LogicalTime const & theTime)
+throw (rti1516e::InvalidLogicalTime,
+ rti1516e::LogicalTimeAlreadyPassed,
+ rti1516e::InTimeAdvancingState,
+ rti1516e::RequestForTimeRegulationPending,
+ rti1516e::RequestForTimeConstrainedPending,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ M_Time_Advance_Request_Available req, rep ;
+
+ certi::FederationTime
certiFedTime(certi_cast<RTI1516fedTime>()(theTime).getFedTime());
+ req.setDate(certiFedTime);
+
+ privateRefs->executeService(&req, &rep);
+ }
+
+// 8.10
+void RTI1516ambassador::nextMessageRequest
+(rti1516e::LogicalTime const & theTime)
+throw (rti1516e::InvalidLogicalTime,
+ rti1516e::LogicalTimeAlreadyPassed,
+ rti1516e::InTimeAdvancingState,
+ rti1516e::RequestForTimeRegulationPending,
+ rti1516e::RequestForTimeConstrainedPending,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ M_Next_Event_Request req, rep ;
+
+ certi::FederationTime
certiFedTime(certi_cast<RTI1516fedTime>()(theTime).getFedTime());
+ req.setDate(certiFedTime);
+
+ privateRefs->executeService(&req, &rep);
+ }
+
+// 8.11
+void RTI1516ambassador::nextMessageRequestAvailable
+(rti1516e::LogicalTime const & theTime)
+throw (rti1516e::InvalidLogicalTime,
+ rti1516e::LogicalTimeAlreadyPassed,
+ rti1516e::InTimeAdvancingState,
+ rti1516e::RequestForTimeRegulationPending,
+ rti1516e::RequestForTimeConstrainedPending,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ M_Next_Event_Request_Available req, rep ;
+
+ certi::FederationTime
certiFedTime(certi_cast<RTI1516fedTime>()(theTime).getFedTime());
+ req.setDate(certiFedTime);
+
+ privateRefs->executeService(&req, &rep);
+ }
+
+// 8.12
+void RTI1516ambassador::flushQueueRequest
+(rti1516e::LogicalTime const & theTime)
+throw (rti1516e::InvalidLogicalTime,
+ rti1516e::LogicalTimeAlreadyPassed,
+ rti1516e::InTimeAdvancingState,
+ rti1516e::RequestForTimeRegulationPending,
+ rti1516e::RequestForTimeConstrainedPending,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ // JvY: Implementation copied from previous CERTI implementation,
including immediate throw.
+ throw rti1516e::RTIinternalError(L"Unimplemented Service
flushQueueRequest");
+ M_Flush_Queue_Request req, rep ;
+
+ certi::FederationTime
certiFedTime(certi_cast<RTI1516fedTime>()(theTime).getFedTime());
+ req.setDate(certiFedTime);
+
+ privateRefs->executeService(&req, &rep);
+ }
+
+// 8.14
+void RTI1516ambassador::enableAsynchronousDelivery ()
+throw (rti1516e::AsynchronousDeliveryAlreadyEnabled,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ // throw AsynchronousDeliveryAlreadyEnabled("Default value (non HLA)");
+
+ M_Enable_Asynchronous_Delivery req, rep ;
+
+ privateRefs->executeService(&req, &rep);
+ }
+
+// 8.15
+void RTI1516ambassador::disableAsynchronousDelivery ()
+throw (rti1516e::AsynchronousDeliveryAlreadyDisabled,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ M_Disable_Asynchronous_Delivery req, rep ;
+
+ privateRefs->executeService(&req, &rep);
+ }
+
+// 8.16
+bool RTI1516ambassador::queryGALT (rti1516e::LogicalTime & theTime)
+throw (rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ //TODO JRE: goed testen! Is GALT wel precies het zelfde als LBTS?
+ M_Query_Lbts req, rep ;
+
+ privateRefs->executeService(&req, &rep);
+
+ //TODO JRE: goed testen of deze return value wel klopt!
+ certi::FederationTime fedTime = rep.getDate();
+ if (fedTime.getTime() == 0.0) {
+ return false;
+ }
+
+ // JvY: TODO Controleren of dit blijft werken met andere
tijdsimplementaties
+ certi_cast<RTI1516fedTime>()(theTime) = rep.getDate().getTime();
+
+ return true;
+ }
+
+// 8.17
+void RTI1516ambassador::queryLogicalTime (rti1516e::LogicalTime & theTime)
+throw (rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ M_Query_Federate_Time req, rep ;
+
+ privateRefs->executeService(&req, &rep);
+
+ // JvY: TODO Controleren of dit blijft werken met andere
tijdsimplementaties
+ certi_cast<RTI1516fedTime>()(theTime) = rep.getDate().getTime();
+ }
+
+// 8.18
+bool RTI1516ambassador::queryLITS (rti1516e::LogicalTime & theTime)
+throw (rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ //TODO JRE: goed testen! Is LITS wel precies het zelfde als
QueryMinNextEventTime?
+ M_Query_Min_Next_Event_Time req, rep ;
+
+ privateRefs->executeService(&req, &rep);
+
+ //TODO JRE: goed testen of deze return value wel klopt!
+ certi::FederationTime fedTime = rep.getDate();
+ if (fedTime.getTime() == 0.0) {
+ return false;
+ }
+ // JvY: TODO Controleren of dit blijft werken met andere
tijdsimplementaties
+ certi_cast<RTI1516fedTime>()(theTime) = rep.getDate().getTime();
+
+ return true;
+ }
+
+// 8.19
+void RTI1516ambassador::modifyLookahead
+(rti1516e::LogicalTimeInterval const & theLookahead)
+throw (rti1516e::TimeRegulationIsNotEnabled,
+ rti1516e::InvalidLookahead,
+ rti1516e::InTimeAdvancingState,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ /* TODO */
+ throw rti1516e::RTIinternalError(L"Not yet implemented");
+ }
+
+// 8.20
+void RTI1516ambassador::queryLookahead (rti1516e::LogicalTimeInterval &
interval)
+throw (rti1516e::TimeRegulationIsNotEnabled,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ /* TODO */
+ throw rti1516e::RTIinternalError(L"Not yet implemented");
+ }
+
+// 8.21
+void RTI1516ambassador::retract
+(rti1516e::MessageRetractionHandle theHandle)
+throw (rti1516e::InvalidRetractionHandle,
+ rti1516e::TimeRegulationIsNotEnabled,
+ rti1516e::MessageCanNoLongerBeRetracted,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ throw rti1516e::RTIinternalError(L"Unimplemented Service retract");
+ M_Retract req, rep ;
+
+ certi::EventRetraction event =
rti1516e::MessageRetractionHandleFriend::createEventRetraction(theHandle);
+ req.setEventRetraction(event);
+
+ privateRefs->executeService(&req, &rep);
+ }
+
+// 8.23
+void RTI1516ambassador::changeAttributeOrderType
+(rti1516e::ObjectInstanceHandle theObject,
+ rti1516e::AttributeHandleSet const & theAttributes,
+ rti1516e::OrderType theType)
+throw (rti1516e::ObjectInstanceNotKnown,
+ rti1516e::AttributeNotDefined,
+ rti1516e::AttributeNotOwned,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ M_Change_Attribute_Order_Type req, rep ;
+
+
req.setObject(rti1516e::ObjectInstanceHandleFriend::toCertiHandle(theObject));
+ req.setOrder(certi::toCertiOrderType(theType));
+
+ assignAHSAndExecuteService(theAttributes, req, rep);
+ }
+
+// 8.24
+void RTI1516ambassador::changeInteractionOrderType
+(rti1516e::InteractionClassHandle theClass,
+ rti1516e::OrderType theType)
+throw (rti1516e::InteractionClassNotDefined,
+ rti1516e::InteractionClassNotPublished,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ M_Change_Interaction_Order_Type req, rep ;
+
+
req.setInteractionClass(rti1516e::InteractionClassHandleFriend::toCertiHandle(theClass));
+ req.setOrder(certi::toCertiOrderType(theType));
+
+ privateRefs->executeService(&req, &rep);
+ }
+
+//////////////////////////////////
+// Data Distribution Management //
+//////////////////////////////////
+
+// 9.2
+rti1516e::RegionHandle RTI1516ambassador::createRegion
+(rti1516e::DimensionHandleSet const & theDimensions)
+throw (rti1516e::InvalidDimensionHandle,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ /* TODO */
+ throw rti1516e::RTIinternalError(L"Not yet implemented");
+ }
+
+// 9.3
+void RTI1516ambassador::commitRegionModifications
+(rti1516e::RegionHandleSet const & theRegionHandleSet)
+throw (rti1516e::InvalidRegion,
+ rti1516e::RegionNotCreatedByThisFederate,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ /* TODO */
+ throw rti1516e::RTIinternalError(L"Not yet implemented");
+ }
+
+// 9.4
+void RTI1516ambassador::deleteRegion
+(rti1516e::RegionHandle theRegion)
+throw (rti1516e::InvalidRegion,
+ rti1516e::RegionNotCreatedByThisFederate,
+ rti1516e::RegionInUseForUpdateOrSubscription,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ /* TODO */
+ throw rti1516e::RTIinternalError(L"Not yet implemented");
+ }
+
+// 9.5
+rti1516e::ObjectInstanceHandle
RTI1516ambassador::registerObjectInstanceWithRegions
+(rti1516e::ObjectClassHandle theClass,
+ rti1516e::AttributeHandleSetRegionHandleSetPairVector const &
+ theAttributeHandleSetRegionHandleSetPairVector)
+throw (rti1516e::ObjectClassNotDefined,
+ rti1516e::ObjectClassNotPublished,
+ rti1516e::AttributeNotDefined,
+ rti1516e::AttributeNotPublished,
+ rti1516e::InvalidRegion,
+ rti1516e::RegionNotCreatedByThisFederate,
+ rti1516e::InvalidRegionContext,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ /* TODO */
+ throw rti1516e::RTIinternalError(L"Not yet implemented");
+ }
+
+rti1516e::ObjectInstanceHandle
RTI1516ambassador::registerObjectInstanceWithRegions
+(rti1516e::ObjectClassHandle theClass,
+ rti1516e::AttributeHandleSetRegionHandleSetPairVector const &
+ theAttributeHandleSetRegionHandleSetPairVector,
+ std::wstring const & theObjectInstanceName)
+throw (rti1516e::ObjectClassNotDefined,
+ rti1516e::ObjectClassNotPublished,
+ rti1516e::AttributeNotDefined,
+ rti1516e::AttributeNotPublished,
+ rti1516e::InvalidRegion,
+ rti1516e::RegionNotCreatedByThisFederate,
+ rti1516e::InvalidRegionContext,
+ rti1516e::ObjectInstanceNameNotReserved,
+ rti1516e::ObjectInstanceNameInUse,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ /* TODO */
+ throw rti1516e::RTIinternalError(L"Not yet implemented");
+ }
+
+// 9.6
+void RTI1516ambassador::associateRegionsForUpdates
+(rti1516e::ObjectInstanceHandle theObject,
+ rti1516e::AttributeHandleSetRegionHandleSetPairVector const &
+ theAttributeHandleSetRegionHandleSetPairVector)
+throw (rti1516e::ObjectInstanceNotKnown,
+ rti1516e::AttributeNotDefined,
+ rti1516e::InvalidRegion,
+ rti1516e::RegionNotCreatedByThisFederate,
+ rti1516e::InvalidRegionContext,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ /* TODO */
+ throw rti1516e::RTIinternalError(L"Not yet implemented");
+ }
+
+// 9.7
+void RTI1516ambassador::unassociateRegionsForUpdates
+(rti1516e::ObjectInstanceHandle theObject,
+ rti1516e::AttributeHandleSetRegionHandleSetPairVector const &
+ theAttributeHandleSetRegionHandleSetPairVector)
+throw (rti1516e::ObjectInstanceNotKnown,
+ rti1516e::AttributeNotDefined,
+ rti1516e::InvalidRegion,
+ rti1516e::RegionNotCreatedByThisFederate,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ /* TODO */
+ throw rti1516e::RTIinternalError(L"Not yet implemented");
+ }
+
+// 9.8
+void RTI1516ambassador::subscribeObjectClassAttributesWithRegions
+(rti1516e::ObjectClassHandle theClass,
+ rti1516e::AttributeHandleSetRegionHandleSetPairVector const &
+ theAttributeHandleSetRegionHandleSetPairVector,
+ bool active)
+throw (rti1516e::ObjectClassNotDefined,
+ rti1516e::AttributeNotDefined,
+ rti1516e::InvalidRegion,
+ rti1516e::RegionNotCreatedByThisFederate,
+ rti1516e::InvalidRegionContext,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ /* TODO */
+ throw rti1516e::RTIinternalError(L"Not yet implemented");
+ }
+
+// 9.9
+void RTI1516ambassador::unsubscribeObjectClassAttributesWithRegions
+(rti1516e::ObjectClassHandle theClass,
+ rti1516e::AttributeHandleSetRegionHandleSetPairVector const &
+ theAttributeHandleSetRegionHandleSetPairVector)
+throw (rti1516e::ObjectClassNotDefined,
+ rti1516e::AttributeNotDefined,
+ rti1516e::InvalidRegion,
+ rti1516e::RegionNotCreatedByThisFederate,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ /* TODO */
+ throw rti1516e::RTIinternalError(L"Not yet implemented");
+ }
+
+// 9.10
+void RTI1516ambassador::subscribeInteractionClassWithRegions
+(rti1516e::InteractionClassHandle theClass,
+ rti1516e::RegionHandleSet const & theRegionHandleSet,
+ bool active)
+throw (rti1516e::InteractionClassNotDefined,
+ rti1516e::InvalidRegion,
+ rti1516e::RegionNotCreatedByThisFederate,
+ rti1516e::InvalidRegionContext,
+ rti1516e::FederateServiceInvocationsAreBeingReportedViaMOM,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ /* TODO */
+ throw rti1516e::RTIinternalError(L"Not yet implemented");
+ }
+
+// 9.11
+void RTI1516ambassador::unsubscribeInteractionClassWithRegions
+(rti1516e::InteractionClassHandle theClass,
+ rti1516e::RegionHandleSet const & theRegionHandleSet)
+throw (rti1516e::InteractionClassNotDefined,
+ rti1516e::InvalidRegion,
+ rti1516e::RegionNotCreatedByThisFederate,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ /* TODO */
+ throw rti1516e::RTIinternalError(L"Not yet implemented");
+ }
+
+// 9.12
+void RTI1516ambassador::sendInteractionWithRegions
+(rti1516e::InteractionClassHandle theInteraction,
+ rti1516e::ParameterHandleValueMap const & theParameterValues,
+ rti1516e::RegionHandleSet const & theRegionHandleSet,
+ rti1516e::VariableLengthData const & theUserSuppliedTag)
+throw (rti1516e::InteractionClassNotDefined,
+ rti1516e::InteractionClassNotPublished,
+ rti1516e::InteractionParameterNotDefined,
+ rti1516e::InvalidRegion,
+ rti1516e::RegionNotCreatedByThisFederate,
+ rti1516e::InvalidRegionContext,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ /* TODO */
+ throw rti1516e::RTIinternalError(L"Not yet implemented");
+ }
+
+rti1516e::MessageRetractionHandle RTI1516ambassador::sendInteractionWithRegions
+(rti1516e::InteractionClassHandle theInteraction,
+ rti1516e::ParameterHandleValueMap const & theParameterValues,
+ rti1516e::RegionHandleSet const & theRegionHandleSet,
+ rti1516e::VariableLengthData const & theUserSuppliedTag,
+ rti1516e::LogicalTime const & theTime)
+throw (rti1516e::InteractionClassNotDefined,
+ rti1516e::InteractionClassNotPublished,
+ rti1516e::InteractionParameterNotDefined,
+ rti1516e::InvalidRegion,
+ rti1516e::RegionNotCreatedByThisFederate,
+ rti1516e::InvalidRegionContext,
+ rti1516e::InvalidLogicalTime,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ /* TODO */
+ throw rti1516e::RTIinternalError(L"Not yet implemented");
+ }
+
+// 9.13
+void RTI1516ambassador::requestAttributeValueUpdateWithRegions
+(rti1516e::ObjectClassHandle theClass,
+ rti1516e::AttributeHandleSetRegionHandleSetPairVector const & theSet,
+ rti1516e::VariableLengthData const & theUserSuppliedTag)
+throw (rti1516e::ObjectClassNotDefined,
+ rti1516e::AttributeNotDefined,
+ rti1516e::InvalidRegion,
+ rti1516e::RegionNotCreatedByThisFederate,
+ rti1516e::InvalidRegionContext,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ /* TODO */
+ throw rti1516e::RTIinternalError(L"Not yet implemented");
+ }
+
+//////////////////////////
+// RTI Support Services //
+//////////////////////////
+
+// 10.2
+rti1516e::ObjectClassHandle RTI1516ambassador::getObjectClassHandle
+(std::wstring const & theName)
+throw (rti1516e::NameNotFound,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::RTIinternalError)
+ {
+ M_Get_Object_Class_Handle req, rep ;
+
+ G.Out(pdGendoc,"enter RTI1516ambassador::getObjectClassHandle");
+
+ std::string nameAsString(theName.begin(), theName.end());
+ req.setClassName(nameAsString);
+ privateRefs->executeService(&req, &rep);
+
+ G.Out(pdGendoc,"exit RTI1516ambassador::getObjectClassHandle");
+ rti1516e::ObjectClassHandle rti1516Handle =
rti1516e::ObjectClassHandleFriend::createRTI1516Handle(rep.getObjectClass());
+
+ return rti1516Handle;
+ }
+
+// 10.3
+std::wstring RTI1516ambassador::getObjectClassName
+(rti1516e::ObjectClassHandle theHandle)
+throw (rti1516e::InvalidObjectClassHandle,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::RTIinternalError)
+ {
+ M_Get_Object_Class_Name req, rep ;
+
+ certi::ObjectClassHandle certiHandle =
rti1516e::ObjectClassHandleFriend::toCertiHandle(theHandle);
+ req.setObjectClass(certiHandle);
+ try {
+ privateRefs->executeService(&req, &rep);
+ } catch (rti1516e::ObjectClassNotDefined &e)
+ {
+ throw rti1516e::InvalidObjectClassHandle(e.what());
+ }
+
+ std::string nameString = rep.getClassName();
+ std::wstring nameWString(nameString.begin(), nameString.end());
+
+ //return hla_strdup(rep.getClassName());
+ return nameWString;
+ }
+
+// 10.4
+rti1516e::AttributeHandle RTI1516ambassador::getAttributeHandle
+(rti1516e::ObjectClassHandle whichClass,
+ std::wstring const & theAttributeName)
+throw (rti1516e::InvalidObjectClassHandle,
+ rti1516e::NameNotFound,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::RTIinternalError)
+ {
+ G.Out(pdGendoc,"enter RTI::RTI1516ambassador::getAttributeHandle");
+ M_Get_Attribute_Handle req, rep ;
+
+ std::string nameAsString(theAttributeName.begin(), theAttributeName.end());
+ req.setAttributeName(nameAsString);
+
req.setObjectClass(rti1516e::ObjectClassHandleFriend::toCertiHandle(whichClass));
+
+ try {
+ privateRefs->executeService(&req, &rep);
+ } catch (rti1516e::ObjectClassNotDefined &e)
+ {
+ if ( ! whichClass.isValid() ) {
+ throw rti1516e::InvalidObjectClassHandle(e.what());
+ } else {
+ throw rti1516e::NameNotFound(e.what());
+ }
+ }
+
+
+
+ G.Out(pdGendoc,"exit RTI::RTI1516ambassador::getAttributeHandle");
+ return
rti1516e::AttributeHandleFriend::createRTI1516Handle(rep.getAttribute());
+ }
+
+// 10.5
+std::wstring RTI1516ambassador::getAttributeName
+(rti1516e::ObjectClassHandle whichClass,
+ rti1516e::AttributeHandle theHandle)
+throw (rti1516e::InvalidObjectClassHandle,
+ rti1516e::InvalidAttributeHandle,
+ rti1516e::AttributeNotDefined,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::RTIinternalError)
+ {
+ M_Get_Attribute_Name req, rep ;
+
+
req.setAttribute(rti1516e::AttributeHandleFriend::toCertiHandle(theHandle));
+
req.setObjectClass(rti1516e::ObjectClassHandleFriend::toCertiHandle(whichClass));
+ try {
+ privateRefs->executeService(&req, &rep);
+ } catch (rti1516e::ObjectClassNotDefined &e)
+ {
+ if ( !whichClass.isValid() )
+ {
+ throw rti1516e::InvalidObjectClassHandle(e.what());
+ } else
+ {
+ throw;
+ }
+ } catch ( rti1516e::AttributeNotDefined &e)
+ {
+ if (! theHandle.isValid() )
+ {
+ throw rti1516e::InvalidAttributeHandle(e.what());
+ } else
+ {
+ throw;
+ }
+ }
+
+ //return hla_strdup(rep.getAttributeName());
+
+ std::string nameString = rep.getAttributeName();
+ std::wstring nameWString(nameString.begin(), nameString.end());
+
+ return nameWString;
+ }
+
+// 10.6
+rti1516e::InteractionClassHandle RTI1516ambassador::getInteractionClassHandle
+(std::wstring const & theName)
+throw (rti1516e::NameNotFound,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::RTIinternalError)
+ {
+ M_Get_Interaction_Class_Handle req, rep ;
+ std::string nameString(theName.begin(), theName.end());
+ req.setClassName(nameString);
+
+ privateRefs->executeService(&req, &rep);
+
+ return
rti1516e::InteractionClassHandleFriend::createRTI1516Handle(rep.getInteractionClass());
+ }
+
+// 10.7
+std::wstring RTI1516ambassador::getInteractionClassName
+(rti1516e::InteractionClassHandle theHandle)
+throw (rti1516e::InvalidInteractionClassHandle,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::RTIinternalError)
+ {
+ M_Get_Interaction_Class_Name req, rep ;
+
req.setInteractionClass(rti1516e::InteractionClassHandleFriend::toCertiHandle(theHandle));
+ try {
+ privateRefs->executeService(&req, &rep);
+ } catch (rti1516e::InteractionClassNotDefined &e)
+ {
+ if ( !theHandle.isValid() )
+ {
+ throw rti1516e::InvalidInteractionClassHandle(e.what());
+ } else
+ {
+ throw;
+ }
+ }
+
+ //return hla_strdup(rep.getClassName());
+ std::string nameString = rep.getClassName();
+ std::wstring nameWString(nameString.begin(), nameString.end());
+
+ return nameWString;
+ }
+
+// 10.8
+rti1516e::ParameterHandle RTI1516ambassador::getParameterHandle
+(rti1516e::InteractionClassHandle whichClass,
+ std::wstring const & theName)
+throw (rti1516e::InvalidInteractionClassHandle,
+ rti1516e::NameNotFound,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::RTIinternalError)
+ {
+ M_Get_Parameter_Handle req, rep ;
+ std::string nameString(theName.begin(), theName.end());
+ req.setParameterName(nameString);
+
req.setInteractionClass(rti1516e::InteractionClassHandleFriend::toCertiHandle(whichClass));
+
+ try {
+ privateRefs->executeService(&req, &rep);
+ } catch (rti1516e::InteractionClassNotDefined &e)
+ {
+ if ( !whichClass.isValid() )
+ {
+ throw rti1516e::InvalidInteractionClassHandle(e.what());
+ } else
+ {
+ throw;
+ }
+ }
+
+ return
rti1516e::ParameterHandleFriend::createRTI1516Handle(rep.getParameter());
+ }
+
+// 10.9
+std::wstring RTI1516ambassador::getParameterName
+(rti1516e::InteractionClassHandle whichClass,
+ rti1516e::ParameterHandle theHandle)
+throw ( rti1516e::InvalidInteractionClassHandle,
+ rti1516e::InvalidParameterHandle,
+ rti1516e::InteractionParameterNotDefined,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::RTIinternalError)
+ {
+ M_Get_Parameter_Name req, rep ;
+
+
req.setParameter(rti1516e::ParameterHandleFriend::toCertiHandle(theHandle));
+
req.setInteractionClass(rti1516e::InteractionClassHandleFriend::toCertiHandle(whichClass));
+
+ try {
+ privateRefs->executeService(&req, &rep);
+ } catch (rti1516e::InteractionClassNotDefined &e)
+ {
+ if ( !whichClass.isValid() )
+ {
+ throw rti1516e::InvalidInteractionClassHandle(e.what());
+ } else
+ {
+ throw;
+ }
+ }
+
+ //return hla_strdup(rep.getParameterName());
+ std::string nameString = rep.getParameterName();
+ std::wstring nameWString(nameString.begin(), nameString.end());
+
+ return nameWString;
+ }
+
+// 10.10
+rti1516e::ObjectInstanceHandle RTI1516ambassador::getObjectInstanceHandle
+(std::wstring const & theName)
+throw (rti1516e::ObjectInstanceNotKnown,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::RTIinternalError)
+ {
+ M_Get_Object_Instance_Handle req, rep ;
+ std::string nameString(theName.begin(), theName.end());
+ req.setObjectInstanceName(nameString);
+
+ privateRefs->executeService(&req, &rep);
+ return
rti1516e::ObjectInstanceHandleFriend::createRTI1516Handle(rep.getObject());
+ }
+
+// 10.11
+std::wstring RTI1516ambassador::getObjectInstanceName
+(rti1516e::ObjectInstanceHandle theHandle)
+throw (rti1516e::ObjectInstanceNotKnown,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::RTIinternalError)
+ {
+ M_Get_Object_Instance_Name req, rep ;
+
req.setObject(rti1516e::ObjectInstanceHandleFriend::toCertiHandle(theHandle));
+ privateRefs->executeService(&req, &rep);
+
+ //return hla_strdup(rep.getObjectInstanceName());
+ std::string nameString = rep.getObjectInstanceName();
+ std::wstring nameWString(nameString.begin(), nameString.end());
+
+ return nameWString;
+ }
+
+// 10.12
+rti1516e::DimensionHandle RTI1516ambassador::getDimensionHandle
+(std::wstring const & theName)
+throw (rti1516e::NameNotFound,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::RTIinternalError)
+ {
+ M_Get_Dimension_Handle req, rep ;
+
+ std::string nameString(theName.begin(), theName.end());
+ req.setDimensionName(nameString);
+ //req.setSpace(space); //SPACE NIET NODIG IN 1516 STANDAARD???
+ privateRefs->executeService(&req, &rep);
+ return
rti1516e::DimensionHandleFriend::createRTI1516Handle(rep.getDimension());
+ }
+
+// 10.13
+std::wstring RTI1516ambassador::getDimensionName
+(rti1516e::DimensionHandle theHandle)
+throw (rti1516e::InvalidDimensionHandle,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::RTIinternalError)
+ {
+ M_Get_Dimension_Name req, rep ;
+
+
req.setDimension(rti1516e::DimensionHandleFriend::toCertiHandle(theHandle));
+ //req.setSpace(space);
+ privateRefs->executeService(&req, &rep);
+ //return hla_strdup(rep.getDimensionName());
+ std::string nameString = rep.getDimensionName();
+ std::wstring nameWString(nameString.begin(), nameString.end());
+
+ return nameWString;
+ }
+
+// 10.14
+unsigned long RTI1516ambassador::getDimensionUpperBound
+(rti1516e::DimensionHandle theHandle)
+throw (rti1516e::InvalidDimensionHandle,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::RTIinternalError)
+ {
+ /* TODO */
+ throw rti1516e::RTIinternalError(L"Not yet implemented");
+ }
+
+// 10.15
+rti1516e::DimensionHandleSet
RTI1516ambassador::getAvailableDimensionsForClassAttribute
+(rti1516e::ObjectClassHandle theClass,
+ rti1516e::AttributeHandle theHandle)
+throw (rti1516e::InvalidObjectClassHandle,
+ rti1516e::InvalidAttributeHandle,
+ rti1516e::AttributeNotDefined,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::RTIinternalError)
+ {
+ M_Get_Attribute_Space_Handle req, rep ;
+
+
req.setAttribute(rti1516e::AttributeHandleFriend::toCertiHandle(theHandle));
+
req.setObjectClass(rti1516e::ObjectClassHandleFriend::toCertiHandle(theClass));
+ privateRefs->executeService(&req, &rep);
+
+ //JRE TODO: Use space handle to to get the address@hidden
+ //return rep.getSpace();
+ rti1516e::DimensionHandleSet invalidSet;
+ return invalidSet;
+ }
+
+// 10.16
+rti1516e::ObjectClassHandle RTI1516ambassador::getKnownObjectClassHandle
+(rti1516e::ObjectInstanceHandle theObject)
+throw (rti1516e::ObjectInstanceNotKnown,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::RTIinternalError)
+ {
+ M_Get_Object_Class req, rep ;
+
+
req.setObject(rti1516e::ObjectInstanceHandleFriend::toCertiHandle(theObject));
+ privateRefs->executeService(&req, &rep);
+ return
rti1516e::ObjectClassHandleFriend::createRTI1516Handle(rep.getObjectClass());
+ }
+
+// 10.17
+rti1516e::DimensionHandleSet
RTI1516ambassador::getAvailableDimensionsForInteractionClass
+(rti1516e::InteractionClassHandle theClass)
+throw (rti1516e::InvalidInteractionClassHandle,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::RTIinternalError)
+ {
+ M_Get_Interaction_Space_Handle req, rep ;
+
+
req.setInteractionClass(rti1516e::InteractionClassHandleFriend::toCertiHandle(theClass));
+ this->privateRefs->executeService(&req, &rep);
+
+ //JRE TODO: Use space handle to to get the address@hidden
+ //return rep.getSpace();
+ rti1516e::DimensionHandleSet invalidSet;
+ return invalidSet;
+ }
+
+// 10.18
+rti1516e::TransportationType RTI1516ambassador::getTransportationType
+(std::wstring const & transportationName)
+throw (rti1516e::InvalidTransportationName,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::RTIinternalError)
+ {
+ M_Get_Transportation_Handle req, rep ;
+ std::string nameString(transportationName.begin(),
transportationName.end());
+ req.setTransportationName(nameString);
+ privateRefs->executeService(&req, &rep);
+
+ return certi::toRTI1516TransportationType(rep.getTransportation());
+ }
+
+// 10.19
+std::wstring RTI1516ambassador::getTransportationName
+(rti1516e::TransportationType transportationType)
+throw (rti1516e::InvalidTransportationType,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::RTIinternalError)
+ {
+ M_Get_Transportation_Name req, rep ;
+
+
req.setTransportation(certi::toCertiTransportationType(transportationType));
+ privateRefs->executeService(&req, &rep);
+
+ //return hla_strdup(rep.getTransportationName());
+ std::string nameString = rep.getTransportationName();
+ std::wstring nameWString(nameString.begin(), nameString.end());
+
+ return nameWString;
+ }
+
+// 10.20
+rti1516e::OrderType RTI1516ambassador::getOrderType
+(std::wstring const & orderName)
+throw (rti1516e::InvalidOrderName,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::RTIinternalError)
+ {
+ M_Get_Ordering_Handle req, rep ;
+
+ std::string nameAsString(orderName.begin(), orderName.end());
+ req.setOrderingName(nameAsString);
+ privateRefs->executeService(&req, &rep);
+
+ return certi::toRTI1516OrderType(rep.getOrdering());
+ }
+
+// 10.21
+std::wstring RTI1516ambassador::getOrderName
+(rti1516e::OrderType orderType)
+throw (rti1516e::InvalidOrderType,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::RTIinternalError)
+ {
+ M_Get_Ordering_Name req, rep ;
+
+ req.setOrdering(certi::toCertiOrderType(orderType));
+ privateRefs->executeService(&req, &rep);
+
+ //return hla_strdup(rep.getOrderingName());
+ std::string nameString = rep.getOrderingName();
+ std::wstring nameWString(nameString.begin(), nameString.end());
+
+ return nameWString;
+ }
+
+// 10.22
+/**
+ * Sets the ClassRelevanceAdvisory (CRA) switch to true. The switch
+ * state is hold on the RTIG side. That's why the message
+ * ENABLE_CLASS_RELEVANCE_ADVISORY_SWITCH
+ * is transmitted to RTIA. RTIA transmits the message towards RTIG.
+ *
+ * By default, the CRA switch is true. This causes a delivery of the
+ * federate service startRegistrationForObjectClass to a publisher
+ * if there are any new subscribers for the federates published object
+ * classes. If there are no more subscribers a publisher gets the
+ * federate service stopRegistrationForObjectClass.
+ *
+ * By disabling the CRA switch the federate is no longer informed by
+ * subscriptions to its published object classes, i.e. the federate
+ * services startRegistrationForObjectClass and
+ * stopRegistrationForObjectClass respectively are not invoked.
+ * @see disableClassRelevanceAdvisorySwitch()
+ */
+void RTI1516ambassador::enableObjectClassRelevanceAdvisorySwitch ()
+throw (rti1516e::ObjectClassRelevanceAdvisorySwitchIsOn,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ M_Enable_Class_Relevance_Advisory_Switch req, rep ;
+ privateRefs->executeService(&req, &rep);
+ }
+
+// 10.23
+/**
+ * Sets the ClassRelevanceAdvisory (CRA) switch to false. The switch
+ * state is hold on the RTIG side. That's why the message
+ * DISABLE_CLASS_RELEVANCE_ADVISORY_SWITCH
+ * is transmitted to RTIA. RTIA transmits the message towards RTIG.
+ *
+ * By default, the CRA switch is true. This causes a delivery of the
+ * federate service startRegistrationForObjectClass to a publisher
+ * if there are any new subscribers for the federates published object
+ * classes. If there are no more subscribers a publisher gets the
+ * federate service stopRegistrationForObjectClass.
+ * @see enableClassRelevanceAdvisorySwitch()
+ *
+ * By disabling the CRA switch the federate is no longer informed by
+ * subscriptions to its published object classes, i.e. the federate
+ * services startRegistrationForObjectClass and
+ * stopRegistrationForObjectClass respectively are not invoked.
+ */
+void RTI1516ambassador::disableObjectClassRelevanceAdvisorySwitch ()
+throw (rti1516e::ObjectClassRelevanceAdvisorySwitchIsOff,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ M_Disable_Class_Relevance_Advisory_Switch req, rep ;
+ privateRefs->executeService(&req, &rep);
+ }
+
+// 10.24
+/**
+ * Sets the AttributeRelevanceAdvisory (ARA) switch to true. The switch
+ * state is hold on the RTIG side. That's why the message
+ * ENABLE_ATTRIBUTE_RELEVANCE_ADVISORY_SWITCH
+ * is transmitted to RTIA. RTIA transmits the message towards RTIG.
+ *
+ * By default, the ARA switch is false. When enabling the ARA switch
+ * the federate is informed by the federate service
+ * turnUpdatesOnForObjectInstance of new object instances within remote
+ * federates actively subscribed to its published attributes. If there
+ * are no active subscribers for a set of instance-attributes the federate
+ * receives the federate service turnUpdatesOffForObjectInstance.
+ *
+ * By disabling the ARA switch the federate is no longer informed by
+ * subscriptions to its published attributes, i.e. the federate
+ * services turnUpdatesOnForObjectInstance and
+ * turnUpdatesOffForObjectInstance respectively are not invoked.
+ * @see disableAttributeRelevanceAdvisorySwitch()
+ */
+void RTI1516ambassador::enableAttributeRelevanceAdvisorySwitch ()
+throw (rti1516e::AttributeRelevanceAdvisorySwitchIsOn,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ M_Enable_Attribute_Relevance_Advisory_Switch req, rep ;
+ privateRefs->executeService(&req, &rep);
+ }
+
+// 10.25
+/**
+ * Sets the AttributeRelevanceAdvisory (ARA) switch to false. The switch
+ * state is hold on the RTIG side. That's why the message
+ * DISABLE_ATTRIBUTE_RELEVANCE_ADVISORY_SWITCH
+ * is transmitted to RTIA. RTIA transmits the message towards RTIG.
+ *
+ * By default, the ARA switch is false. When enabling the ARA switch
+ * the federate is informed by the federate service
+ * turnUpdatesOnForObjectInstance of new object instances within remote
+ * federates actively subscribed to its published attributes. If there
+ * are no active subscribers for a set of instance-attributes the federate
+ * receives the federate service turnUpdatesOffForObjectInstance.
+ * @see enableAttributeRelevanceAdvisorySwitch()
+ *
+ * By disabling the ARA switch the federate is no longer informed by
+ * subscriptions to its published attributes, i.e. the federate
+ * services turnUpdatesOnForObjectInstance and
+ * turnUpdatesOffForObjectInstance respectively are not invoked.
+ */
+void RTI1516ambassador::disableAttributeRelevanceAdvisorySwitch ()
+throw (rti1516e::AttributeRelevanceAdvisorySwitchIsOff,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ M_Disable_Attribute_Relevance_Advisory_Switch req, rep ;
+ privateRefs->executeService(&req, &rep);
+ }
+
+// 10.26
+/**
+ * Sets the AttributeScopeAdvisory (ASA) switch to true. The switch state
+ * is hold on the RTIG side. That's why the message
+ * ENABLE_ATTRIBUTE_SCOPE_ADVISORY_SWITCH
+ * is transmitted to RTIA. RTIA transmits the message towards RTIG.
+ *
+ * By default, the ASA switch is false. When enabling the ASA switch
+ * the federate is informed by the federate services
+ * attributesInScope and attributesOutScope respectively of discovered
+ * or registrated but not owned attribute-instances intersecting or
+ * leaving its subscription regions.
+ *
+ * By disabling the ASA switch the federate is no longer informed of
+ * changes in attribute-instance scope, i.e. the federate
+ * services attributesInScope and attributesOutScope respectively are
+ * not invoked.
+ * @see disableAttributeScopeAdvisorySwitch()
+ */
+void RTI1516ambassador::enableAttributeScopeAdvisorySwitch ()
+throw (rti1516e::AttributeScopeAdvisorySwitchIsOn,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ M_Enable_Attribute_Scope_Advisory_Switch req, rep ;
+ privateRefs->executeService(&req, &rep);
+ }
+
+// 10.27
+/**
+ * Sets the AttributeScopeAdvisory (ASA) switch to false. The switch state
+ * is hold on the RTIG side. That's why the message
+ * DISABLE_ATTRIBUTE_SCOPE_ADVISORY_SWITCH
+ * is transmitted to RTIA. RTIA transmits the message towards RTIG.
+ *
+ * By default, the ASA switch is false. When enabling the ASA switch
+ * the federate is informed by the federate services
+ * attributesInScope and attributesOutScope respectively of discovered
+ * or registrated but not owned attribute-instances intersecting or
+ * leaving its subscription regions.
+ * @see enableAttributeScopeAdvisorySwitch()
+ *
+ * By disabling the ASA switch the federate is no longer informed of
+ * changes in attribute-instance scope, i.e. the federate
+ * services attributesInScope and attributesOutScope respectively are
+ * not invoked.
+ */
+void RTI1516ambassador::disableAttributeScopeAdvisorySwitch ()
+throw (rti1516e::AttributeScopeAdvisorySwitchIsOff,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ M_Disable_Attribute_Scope_Advisory_Switch req, rep ;
+ privateRefs->executeService(&req, &rep);
+ }
+
+// 10.28
+/**
+ * Sets the InteractionRelevanceAdvisory (IRA) switch to true. The switch
+ * state is hold on the RTIG side. That's why the message
+ * ENABLE_INTERACTION_RELEVANCE_ADVISORY_SWITCH
+ * is transmitted to RTIA. RTIA transmits the message towards RTIG.
+ *
+ * By default, the IRA switch is true. This causes a delivery of the
+ * federate service turnInteractionsOn to a publisher if there are
+ * any new subscribers for the federates published interaction
+ * classes. If there are no more subscribers a publisher gets the
+ * federate service turnInteractionsOff().
+ *
+ * By disabling the IRA switch the federate is no longer informed by
+ * subscriptions to its published interaction classes, i.e. the federate
+ * services turnInteractionsOn and turnInteractionsOff respectively are
+ * not invoked.
+ * @see disableInteractionRelevanceAdvisorySwitch()
+ */
+void RTI1516ambassador::enableInteractionRelevanceAdvisorySwitch ()
+throw (rti1516e::InteractionRelevanceAdvisorySwitchIsOn,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ M_Enable_Interaction_Relevance_Advisory_Switch req, rep ;
+ privateRefs->executeService(&req, &rep);
+ }
+
+// 10.29
+/**
+ * Sets the InteractionRelevanceAdvisory (IRA) switch to false. The switch
+ * state is hold on the RTIG side. That's why the message
+ * DISABLE_INTERACTION_RELEVANCE_ADVISORY_SWITCH
+ * is transmitted to RTIA. RTIA transmits the message towards RTIG.
+ *
+ * By default, the IRA switch is true. This causes a delivery of the
+ * federate service turnInteractionsOn to a publisher if there are
+ * any new subscribers for the federates published interaction
+ * classes. If there are no more subscribers a publisher gets the
+ * federate service turnInteractionsOff().
+ * @see enableInteractionRelevanceAdvisorySwitch()
+ *
+ * By disabling the IRA switch the federate is no longer informed by
+ * subscriptions to its published interaction classes, i.e. the federate
+ * services turnInteractionsOn and turnInteractionsOff respectively are
+ * not invoked.
+ */
+void RTI1516ambassador::disableInteractionRelevanceAdvisorySwitch ()
+throw (rti1516e::InteractionRelevanceAdvisorySwitchIsOff,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ M_Disable_Interaction_Relevance_Advisory_Switch req, rep ;
+ privateRefs->executeService(&req, &rep);
+ }
+
+// 10.30
+
+rti1516e::DimensionHandleSet RTI1516ambassador::getDimensionHandleSet
+(rti1516e::RegionHandle theRegionHandle)
+throw (rti1516e::InvalidRegion,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ /* TODO */
+ throw rti1516e::RTIinternalError(L"Not yet implemented");
+ }
+
+// 10.31
+
+rti1516e::RangeBounds RTI1516ambassador::getRangeBounds
+(rti1516e::RegionHandle theRegionHandle,
+ rti1516e::DimensionHandle theDimensionHandle)
+throw (rti1516e::InvalidRegion,
+ rti1516e::RegionDoesNotContainSpecifiedDimension,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ /* TODO */
+ throw rti1516e::RTIinternalError(L"Not yet implemented");
+ }
+
+// 10.32
+void RTI1516ambassador::setRangeBounds
+(rti1516e::RegionHandle theRegionHandle,
+ rti1516e::DimensionHandle theDimensionHandle,
+ rti1516e::RangeBounds const & theRangeBounds)
+throw (rti1516e::InvalidRegion,
+ rti1516e::RegionNotCreatedByThisFederate,
+ rti1516e::RegionDoesNotContainSpecifiedDimension,
+ rti1516e::InvalidRangeBound,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ /* TODO */
+ throw rti1516e::RTIinternalError(L"Not yet implemented");
+ }
+
+// 10.33
+unsigned long RTI1516ambassador::normalizeFederateHandle
+(rti1516e::FederateHandle theFederateHandle)
+throw (rti1516e::FederateNotExecutionMember,
+ rti1516e::InvalidFederateHandle,
+ rti1516e::RTIinternalError)
+ {
+ /* TODO */
+ throw rti1516e::RTIinternalError(L"Not yet implemented");
+ }
+
+// 10.34
+unsigned long RTI1516ambassador::normalizeServiceGroup
+(rti1516e::ServiceGroupIndicator theServiceGroup)
+throw (rti1516e::FederateNotExecutionMember,
+ rti1516e::InvalidServiceGroup,
+ rti1516e::RTIinternalError)
+ {
+ /* TODO */
+ throw rti1516e::RTIinternalError(L"Not yet implemented");
+ }
+
+// 10.37
+bool RTI1516ambassador::evokeCallback(double approximateMinimumTimeInSeconds)
+throw (rti1516e::FederateNotExecutionMember,
+ rti1516e::RTIinternalError)
+ {
+ return __tick_kernel(false, approximateMinimumTimeInSeconds,
approximateMinimumTimeInSeconds);
+ }
+
+// 10.38
+bool RTI1516ambassador::evokeMultipleCallbacks(double
approximateMinimumTimeInSeconds,
+ double approximateMaximumTimeInSeconds)
+throw (rti1516e::FederateNotExecutionMember,
+ rti1516e::RTIinternalError)
+ {
+ return __tick_kernel(true, approximateMinimumTimeInSeconds,
approximateMaximumTimeInSeconds);
+ }
+
+// 10.39
+void RTI1516ambassador::enableCallbacks ()
+throw (rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ /* TODO */
+ throw rti1516e::RTIinternalError(L"Not yet implemented");
+ }
+
+// 10.40
+void RTI1516ambassador::disableCallbacks ()
+throw (rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError)
+ {
+ /* TODO */
+ throw rti1516e::RTIinternalError(L"Not yet implemented");
+ }
+
+rti1516e::FederateHandle RTI1516ambassador::decodeFederateHandle(
+ rti1516e::VariableLengthData const & encodedValue) const
+{
+ return rti1516e::FederateHandleFriend::createRTI1516Handle(encodedValue);
+}
+
+rti1516e::ObjectClassHandle RTI1516ambassador::decodeObjectClassHandle(
+ rti1516e::VariableLengthData const & encodedValue) const
+{
+ return
rti1516e::ObjectClassHandleFriend::createRTI1516Handle(encodedValue);
+}
+
+rti1516e::InteractionClassHandle
RTI1516ambassador::decodeInteractionClassHandle(
+ rti1516e::VariableLengthData const & encodedValue) const
+{
+ return
rti1516e::InteractionClassHandleFriend::createRTI1516Handle(encodedValue);
+}
+
+rti1516e::ObjectInstanceHandle RTI1516ambassador::decodeObjectInstanceHandle(
+ rti1516e::VariableLengthData const & encodedValue) const
+{
+ return
rti1516e::ObjectInstanceHandleFriend::createRTI1516Handle(encodedValue);
+}
+
+rti1516e::AttributeHandle RTI1516ambassador::decodeAttributeHandle(
+ rti1516e::VariableLengthData const & encodedValue) const
+{
+ return rti1516e::AttributeHandleFriend::createRTI1516Handle(encodedValue);
+}
+
+rti1516e::ParameterHandle RTI1516ambassador::decodeParameterHandle(
+ rti1516e::VariableLengthData const & encodedValue) const
+{
+ return rti1516e::ParameterHandleFriend::createRTI1516Handle(encodedValue);
+}
+
+rti1516e::DimensionHandle RTI1516ambassador::decodeDimensionHandle(
+ rti1516e::VariableLengthData const & encodedValue) const
+{
+ return rti1516e::DimensionHandleFriend::createRTI1516Handle(encodedValue);
+}
+
+rti1516e::MessageRetractionHandle
RTI1516ambassador::decodeMessageRetractionHandle(
+ rti1516e::VariableLengthData const & encodedValue) const
+{
+ return
rti1516e::MessageRetractionHandleFriend::createRTI1516Handle(encodedValue);
+}
+
+rti1516e::RegionHandle RTI1516ambassador::decodeRegionHandle(
+ rti1516e::VariableLengthData const & encodedValue) const
+{
+ return rti1516e::RegionHandleFriend::createRTI1516Handle(encodedValue);
+}
+
+
+} // end namespace certi
Index: libRTI/ieee1516-2010/RTIambPrivateRefs.cpp
===================================================================
RCS file: libRTI/ieee1516-2010/RTIambPrivateRefs.cpp
diff -N libRTI/ieee1516-2010/RTIambPrivateRefs.cpp
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ libRTI/ieee1516-2010/RTIambPrivateRefs.cpp 6 Mar 2014 16:11:32 -0000
1.1
@@ -0,0 +1,1207 @@
+// ----------------------------------------------------------------------------
+// CERTI - HLA RunTime Infrastructure
+// Copyright (C) 2002-2005 ONERA
+//
+// This file is part of CERTI-libRTI
+//
+// CERTI-libRTI is free software ; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public License
+// as published by the Free Software Foundation ; either version 2 of
+// the License, or (at your option) any later version.
+//
+// CERTI-libRTI 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
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this program ; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA
+//
+// $Id: RTIambPrivateRefs.cpp,v 1.1 2014/03/06 16:11:32 erk Exp $
+// ----------------------------------------------------------------------------
+
+#include <config.h>
+#include "RTIambPrivateRefs.h"
+#include "HandleImplementation.h"
+
+#include <RTI/Exception.h>
+#include <RTI/certiLogicalTime.h>
+#include <RTI/certiLogicalTimeInterval.h>
+#include <RTI/certiLogicalTimeFactory.h>
+#include "RTIHandleFactory.h"
+#include "RTI1516fedTime.h"
+
+#include "PrettyDebug.hh"
+#include "M_Classes.hh"
+#include <sstream>
+#include <iostream>
+
+namespace {
+static PrettyDebug D("LIBRTI", __FILE__);
+static PrettyDebug G("GENDOC",__FILE__);
+
+template<typename T>
+std::vector<std::pair<AttributeHandle, AttributeValue_t> >
+getAHVPSFromRequest(T* request)
+{
+ uint32_t size = request->getAttributesSize();
+ std::vector<std::pair<AttributeHandle, AttributeValue_t> > result;
+ result.resize(size);
+
+ for (uint32_t i = 0 ; i < size ; ++i) {
+ result[i].first = request->getAttributes(i);
+ result[i].second.assign(request->getValues(i).data(),
request->getValues(i).length());
+ }
+
+ return result;
+}
+
+template<typename T>
+std::vector<std::pair<rti1516::ParameterHandle, ParameterValue_t> >
+getPHVPSFromRequest(T* request)
+{
+ uint32_t size = request->getParametersSize();
+
+ std::vector<std::pair<rti1516::ParameterHandle, ParameterValue_t> >
result;
+ result.resize(size);
+
+ for (uint32_t i = 0 ; i < size ; ++i) {
+ result[i].first = request->getParameters(i);
+ result[i].second.assign(request->getValues(i).data(),
request->getValues(i).length());
+ }
+
+ return result;
+}
+
+template<typename T>
+rti1516::AttributeHandleValueMap *
+getAHVMFromRequest(T* request)
+{
+ uint32_t size = request->getAttributesSize();
+ rti1516::AttributeHandleValueMap *result = new
rti1516::AttributeHandleValueMap();
+
+ for (uint32_t i = 0 ; i < size ; ++i) {
+ rti1516::AttributeHandle attribute =
rti1516::AttributeHandleFriend::createRTI1516Handle(request->getAttributes(i));
+ rti1516::VariableLengthData
varData(&(request->getValues(i)[0]), request->getValues(i).size());
+
result->insert(std::pair<rti1516::AttributeHandle,rti1516::VariableLengthData>(attribute,
varData));
+ }
+
+ return result;
+}
+
+template<typename T>
+rti1516::ParameterHandleValueMap *
+getPHVMFromRequest(T* request)
+{
+ uint32_t size = request->getParametersSize();
+ rti1516::ParameterHandleValueMap *result = new
rti1516::ParameterHandleValueMap();
+
+ for (uint32_t i = 0 ; i < size ; ++i) {
+ rti1516::ParameterHandle parameter =
rti1516::ParameterHandleFriend::createRTI1516Handle(request->getParameters(i));
+ rti1516::VariableLengthData
varData(&(request->getValues(i)[0]), request->getValues(i).size());
+
result->insert(std::pair<rti1516::ParameterHandle,rti1516::VariableLengthData>(parameter,
varData));
+ }
+
+ return result;
+}
+
+template<typename T>
+rti1516::AttributeHandleSet *
+getAHSFromRequest(T* request)
+{
+ uint32_t size = request->getAttributesSize();
+ rti1516::AttributeHandleSet *result = new rti1516::AttributeHandleSet();
+
+ for (uint32_t i = 0 ; i < size ; ++i) {
+ rti1516::AttributeHandle attribute =
rti1516::AttributeHandleFriend::createRTI1516Handle(request->getAttributes(i));
+ result->insert(attribute);
+ }
+
+ return result;
+}
+
+std::auto_ptr< rti1516::LogicalTime >
+getLogicalTime()
+throw ( rti1516::RTIinternalError )
+{
+ std::auto_ptr< rti1516::LogicalTimeFactory > timeFactory =
rti1516::LogicalTimeFactoryFactory::makeLogicalTimeFactory(L"");
+ if (timeFactory.get() != 0)
+ {
+ return timeFactory->makeLogicalTime();
+ } else
+ {
+ throw rti1516::RTIinternalError(L"Could not create
LogicalTimeFactory");
+ }
+}
+
+} // End anonymous namespace
+
+RTI1516ambPrivateRefs::RTI1516ambPrivateRefs()
+{
+ fed_amb = NULL;
+#ifdef _WIN32
+ handle_RTIA = (HANDLE)-1;
+#else
+ pid_RTIA = (pid_t)-1;
+#endif
+ is_reentrant = false;
+ _theRootObj = NULL;
+ socketUn = NULL;
+}
+
+RTI1516ambPrivateRefs::~RTI1516ambPrivateRefs()
+{
+ delete socketUn ;
+}
+
+// ----------------------------------------------------------------------------
+void
+RTI1516ambPrivateRefs::leave(const char *msg) throw (rti1516::RTIinternalError)
+{
+ std::wstringstream smsg;
+ smsg << "RTI called leave because <" <<msg<<">";
+ throw rti1516::RTIinternalError(smsg.str());
+}
+
+// ----------------------------------------------------------------------------
+void
+RTI1516ambPrivateRefs::executeService(Message *req, Message *rep)
+{
+ G.Out(pdGendoc,"enter
RTI1516ambPrivateRefs::executeService(%s,%s)",req->getMessageName(),rep->getMessageName());
+
+ D.Out(pdDebug, "sending request to RTIA.");
+
+ try {
+ req->send(socketUn,msgBufSend);
+ }
+ catch (certi::NetworkError) {
+ std::cerr << "libRTI: exception: NetworkError (write)" <<
std::endl ;
+ if ( req->getMessageType() == certi::Message::CLOSE_CONNEXION)
+ {
+ std::cerr << "libRTI: Could not execute 'Close
connexion' service (Network error). Service request ignored." << std::endl;
+ return;
+ } else
+ {
+ throw rti1516::RTIinternalError(L"libRTI: Network Write
Error");
+ }
+ }
+
+ D.Out(pdDebug, "waiting RTIA reply.");
+
+ // waiting RTI reply.
+ try {
+ rep->receive(socketUn,msgBufReceive);
+ }
+ catch (certi::NetworkError) {
+ std::cerr << "libRTI: exception: NetworkError (read)" <<
std::endl ;
+ throw rti1516::RTIinternalError(L"libRTI: Network Read Error
waiting RTI reply");
+ }
+
+ D.Out(pdDebug, "RTIA reply received.");
+
+
+ if (rep->getMessageType() != req->getMessageType()) {
+ std::cout << "LibRTI: Assertion failed: rep->type != req->type"
<< std::endl ;
+ throw
rti1516::RTIinternalError(L"RTI1516ambPrivateRefs::executeService: "
+ L"rep->type != req->type");
+ }
+
+ D.Out(pdDebug, "processing returned exception (from reply).");
+ // the services may only throw exceptions defined in the HLA standard
+ // the RTIA is responsible for sending 'allowed' exceptions only
+ processException(rep);
+
+ D.Out(pdDebug, "exception processed.");
+ G.Out(pdGendoc,"exit RTI1516ambPrivateRefs::executeService");
+}
+
+void
+RTI1516ambPrivateRefs::sendTickRequestStop()
+{
+ G.Out(pdGendoc,"enter RTI1516ambPrivateRefs::sendTickRequestStop");
+
+ M_Tick_Request_Stop req, rep ;
+
+ try {
+ req.send(socketUn, msgBufSend);
+ }
+ catch (certi::NetworkError) {
+ std::cerr << "libRTI: exception: NetworkError (write)" <<
std::endl ;
+ throw rti1516::RTIinternalError(L"libRTI: Network Write Error");
+ }
+
+ try {
+ rep.receive(socketUn, msgBufReceive);
+ }
+ catch (certi::NetworkError) {
+ std::cerr << "libRTI: exception: NetworkError (read)" <<
std::endl ;
+ throw rti1516::RTIinternalError(L"libRTI: Network Read Error
waiting RTI reply");
+ }
+
+ // ignore the response, ignore exceptions
+ // rep->type == Message::TICK_REQUEST;
+
+ G.Out(pdGendoc,"exit RTI1516ambPrivateRefs::sendTickRequestStop");
+}
+
+// ----------------------------------------------------------------------------
+//! Process exception from received message.
+/*! When a message is received from RTIA, it can contains an exception.
+ This exception is processed by this module and a new exception is thrown.
+ */
+void
+RTI1516ambPrivateRefs::processException(Message *msg)
+{
+ D.Out(pdExcept, "num de l'exception : %d .", msg->getExceptionType());
+ switch(msg->getExceptionType()) {
+ case e_NO_EXCEPTION: {
+ } break ;
+
+ case e_ArrayIndexOutOfBounds: {
+ D.Out(pdExcept, "Throwing e_ArrayIndexOutOfBounds exception.");
+ // JvY: Changed name of exception
+ throw rti1516::RTIinternalError(msg->getExceptionReasonW());
+ } break ;
+
+ case e_AsynchronousDeliveryAlreadyEnabled: {
+ D.Out(pdExcept, "Throwing e_AsynchronousDeliveryAlreadyEnabled
exception.");
+ throw
rti1516::AsynchronousDeliveryAlreadyEnabled(msg->getExceptionReasonW());
+ } break ;
+
+ case e_AsynchronousDeliveryAlreadyDisabled: {
+ D.Out(pdExcept, "Throwing e_AsynchronousDeliveryAlreadyDisabled
exception.");
+ throw
rti1516::AsynchronousDeliveryAlreadyDisabled(msg->getExceptionReasonW());
+ } break ;
+
+ case e_AttributeAlreadyOwned: {
+ D.Out(pdExcept, "Throwing e_AttributeAlreadyOwned exception.");
+ throw
rti1516::AttributeAlreadyOwned(msg->getExceptionReasonW());
+ } break ;
+
+ case e_AttributeAlreadyBeingAcquired: {
+ D.Out(pdExcept,
+ "Throwing e_AttributeAlreadyBeingAcquired
exception.");
+ throw
rti1516::AttributeAlreadyBeingAcquired(msg->getExceptionReasonW());
+ } break ;
+
+ case e_AttributeAlreadyBeingDivested: {
+ D.Out(pdExcept,
+ "Throwing e_AttributeAlreadyBeingDivested
exception.");
+ throw
rti1516::AttributeAlreadyBeingDivested(msg->getExceptionReasonW());
+ } break ;
+
+ case e_AttributeDivestitureWasNotRequested: {
+ D.Out(pdExcept,
+ "Throwing e_AttributeDivestitureWasNotRequested
exception.");
+ throw
rti1516::AttributeDivestitureWasNotRequested(msg->getExceptionReasonW());
+ } break ;
+
+ case e_AttributeAcquisitionWasNotRequested: {
+ D.Out(pdExcept,
+ "Throwing e_AttributeAcquisitionWasNotRequested
exception.");
+ throw
rti1516::AttributeAcquisitionWasNotRequested(msg->getExceptionReasonW());
+ } break ;
+
+ case e_AttributeNotDefined: {
+ D.Out(pdExcept, "Throwing e_AttributeNotDefined exception.");
+ throw rti1516::AttributeNotDefined(msg->getExceptionReasonW());
+ } break ;
+
+ case e_AttributeNotKnown: {
+ D.Out(pdExcept, "Throwing e_AttributeNotKnown exception.");
+ // JvY: Changed name of exception
+ throw
rti1516::AttributeNotRecognized(msg->getExceptionReasonW());
+ } break ;
+
+ case e_AttributeNotOwned: {
+ D.Out(pdExcept, "Throwing e_AttributeNotOwned exception.");
+ throw rti1516::AttributeNotOwned(msg->getExceptionReasonW());
+ } break ;
+
+ case e_AttributeNotPublished: {
+ D.Out(pdExcept, "Throwing e_AttributeNotPublished exception.");
+ throw
rti1516::AttributeNotPublished(msg->getExceptionReasonW());
+ } break ;
+
+ case e_AttributeNotSubscribed: {
+ D.Out(pdExcept, "Throwing e_AttributeNotSubscribed exception.");
+ throw rti1516::RTIinternalError(msg->getExceptionReasonW());
+ } break ;
+
+ case e_ConcurrentAccessAttempted: {
+ D.Out(pdExcept, "Throwing e_ConcurrentAccessAttempted
exception.");
+ // JvY: Changed name of exception
+ throw rti1516::RTIinternalError(msg->getExceptionReasonW());
+ } break ;
+
+ case e_CouldNotDiscover: {
+ D.Out(pdExcept, "Throwing e_CouldNotDiscover exception.");
+ throw rti1516::CouldNotDiscover(msg->getExceptionReasonW());
+ } break ;
+
+ case e_CouldNotOpenFED: {
+ D.Out(pdExcept, "Throwing e_CouldNotOpenFED exception.");
+ // JvY: Changed name of exception
+ throw rti1516::CouldNotOpenFDD(msg->getExceptionReasonW());
+ } break ;
+
+ case e_CouldNotOpenRID: {
+ D.Out(pdExcept, "Throwing e_CouldNotOpenRID exception.");
+ throw rti1516::RTIinternalError(msg->getExceptionReasonW());
+ } break ;
+
+ case e_CouldNotRestore: {
+ D.Out(pdExcept, "Throwing e_CouldNotRestore exception.");
+ // JvY: Changed name of exception
+ throw
rti1516::CouldNotInitiateRestore(msg->getExceptionReasonW());
+ } break ;
+
+ case e_DeletePrivilegeNotHeld: {
+ D.Out(pdExcept, "Throwing e_DeletePrivilegeNotHeld exception.");
+ throw
rti1516::DeletePrivilegeNotHeld(msg->getExceptionReasonW());
+ } break ;
+
+ case e_ErrorReadingRID: {
+ D.Out(pdExcept, "Throwing e_ErrorReadingRID exception.");
+ throw rti1516::RTIinternalError(msg->getExceptionReasonW());
+ } break ;
+
+ case e_ErrorReadingFED: {
+ D.Out(pdExcept, "Throwing e_ErrorReadingFED exception.");
+ // JvY: Changed name of exception
+ throw rti1516::ErrorReadingFDD(msg->getExceptionReasonW());
+ } break ;
+
+ case e_EventNotKnown: {
+ D.Out(pdExcept, "Throwing e_EventNotKnown exception.");
+ // JvY: Changed name of exception
+ throw rti1516::RTIinternalError(msg->getExceptionReasonW());
+ } break ;
+
+ case e_FederateAlreadyPaused: {
+ D.Out(pdExcept, "Throwing e_FederateAlreadyPaused exception.");
+ throw rti1516::RTIinternalError(msg->getExceptionReasonW());
+ } break ;
+
+ case e_FederateAlreadyExecutionMember: {
+ D.Out(pdExcept,
+ "Throwing e_FederateAlreadyExecutionMember
exception.");
+ throw
rti1516::FederateAlreadyExecutionMember(msg->getExceptionReasonW());
+ } break ;
+
+ case e_FederateDoesNotExist: {
+ D.Out(pdExcept, "Throwing e_FederateDoesNotExist exception.");
+ throw rti1516::RTIinternalError(msg->getExceptionReasonW());
+ } break ;
+
+ case e_FederateInternalError: {
+ D.Out(pdExcept, "Throwing e_FederateInternalError exception.");
+ throw
rti1516::FederateInternalError(msg->getExceptionReasonW());
+ } break ;
+
+ case e_FederateNameAlreadyInUse: {
+ D.Out(pdExcept, "Throwing e_FederateNameAlreadyInUse
exception.");
+ throw rti1516::RTIinternalError(msg->getExceptionReasonW());
+ } break ;
+
+ case e_FederateNotExecutionMember: {
+ D.Out(pdExcept, "Throwing e_FederateNotExecutionMember
exception.");
+ throw
rti1516::FederateNotExecutionMember(msg->getExceptionReasonW());
+ } break ;
+
+ case e_FederateNotPaused: {
+ D.Out(pdExcept, "Throwing e_FederateNotPaused exception.");
+ throw rti1516::RTIinternalError(msg->getExceptionReasonW());
+ } break ;
+
+ case e_FederateOwnsAttributes: {
+ D.Out(pdExcept, "Throwing e_FederateOwnsAttributes exception.");
+ throw
rti1516::FederateOwnsAttributes(msg->getExceptionReasonW());
+ } break ;
+
+ case e_FederatesCurrentlyJoined: {
+ D.Out(pdExcept, "Throwing e_FederatesCurrentlyJoined
exception.");
+ throw
rti1516::FederatesCurrentlyJoined(msg->getExceptionReasonW());
+ } break ;
+
+ case e_FederateWasNotAskedToReleaseAttribute: {
+ D.Out(pdExcept,
+ "Throwing
e_FederateWasNotAskedToReleaseAttribute exception.");
+ D.Out(pdDebug,
+ "Throwing
e_FederateWasNotAskedToReleaseAttribute exception.");
+ // JvY: Changed name of exception
+ throw rti1516::RTIinternalError(msg->getExceptionReasonW());
+ } break ;
+
+ case e_FederationAlreadyPaused: {
+ D.Out(pdExcept, "Throwing e_FederationAlreadyPaused
exception.");
+ throw rti1516::RTIinternalError(msg->getExceptionReasonW());
+ } break ;
+
+ case e_FederationExecutionAlreadyExists: {
+ D.Out(pdExcept, "Throwing e_FederationExecutionAlreadyExists
excep.");
+ throw
rti1516::FederationExecutionAlreadyExists(msg->getExceptionReasonW());
+ } break ;
+
+ case e_FederationExecutionDoesNotExist: {
+ D.Out(pdExcept, "Throwing e_FederationExecutionDoesNotExist
except.");
+ throw
rti1516::FederationExecutionDoesNotExist(msg->getExceptionReasonW());
+ } break ;
+
+ case e_FederationNotPaused: {
+ D.Out(pdExcept, "Throwing e_FederationNotPaused exception.");
+ throw rti1516::RTIinternalError(msg->getExceptionReasonW());
+ } break ;
+
+ case e_FederationTimeAlreadyPassed: {
+ D.Out(pdExcept, "Throwing e_FederationTimeAlreadyPassed
exception.");
+ // JvY: Changed name of exception
+ throw rti1516::RTIinternalError(msg->getExceptionReasonW());
+ } break ;
+
+ case e_FederateNotPublishing: {
+ D.Out(pdExcept, "Throwing e_FederateNotPublishing exception.");
+ throw rti1516::RTIinternalError(msg->getExceptionReasonW());
+ } break ;
+
+ case e_FederateNotSubscribing: {
+ D.Out(pdExcept, "Throwing e_FederateNotSubscribing exception.");
+ throw rti1516::RTIinternalError(msg->getExceptionReasonW());
+ } break ;
+
+ case e_RegionNotKnown: {
+ D.Out(pdExcept, "Throwing e_RegionNotKnown exception.");
+ // JvY: Changed name of exception
+ throw rti1516::RTIinternalError(msg->getExceptionReasonW());
+ } break ;
+
+ case e_IDsupplyExhausted: {
+ D.Out(pdExcept, "Throwing e_IDsupplyExhausted exception.");
+ throw rti1516::RTIinternalError(msg->getExceptionReasonW());
+ } break ;
+
+ case e_InteractionClassNotDefined: {
+ D.Out(pdExcept, "Throwing e_InteractionClassNotDefined
exception.");
+ throw
rti1516::InteractionClassNotDefined(msg->getExceptionReasonW());
+ } break ;
+
+ case e_InteractionClassNotKnown: {
+ D.Out(pdExcept, "Throwing e_InteractionClassNotKnown
exception.");
+ // JvY: Changed name of exception
+ throw
rti1516::InteractionClassNotRecognized(msg->getExceptionReasonW());
+ } break ;
+
+ case e_InteractionClassNotPublished: {
+ D.Out(pdExcept, "Throwing e_InteractionClassNotPublished
exception.");
+ throw
rti1516::InteractionClassNotPublished(msg->getExceptionReasonW());
+ } break ;
+
+ case e_InteractionParameterNotDefined: {
+ D.Out(pdExcept,
+ "Throwing e_InteractionParameterNotDefined
exception.");
+ throw
rti1516::InteractionParameterNotDefined(msg->getExceptionReasonW());
+ } break ;
+
+ case e_InteractionParameterNotKnown: {
+ D.Out(pdExcept, "Throwing e_InteractionParameterNotKnown
exception.");
+ // JvY: Changed name of exception
+ throw
rti1516::InteractionParameterNotRecognized(msg->getExceptionReasonW());
+ } break ;
+
+ case e_InvalidDivestitureCondition: {
+ D.Out(pdExcept, "Throwing e_InvalidDivestitureCondition
exception.");
+ throw rti1516::RTIinternalError(msg->getExceptionReasonW());
+ } break ;
+
+ case e_InvalidExtents: {
+ D.Out(pdExcept, "Throwing e_InvalidExtents exception.");
+ // JvY: Changed name of exception
+ throw rti1516::RTIinternalError(msg->getExceptionReasonW());
+ } break ;
+
+ case e_InvalidFederationTime: {
+ D.Out(pdExcept, "Throwing e_InvalidFederationTime exception.");
+ // JvY: Changed name of exception
+ throw rti1516::RTIinternalError(msg->getExceptionReasonW());
+ } break ;
+
+ case e_InvalidFederationTimeDelta: {
+ D.Out(pdExcept, "Throwing e_InvalidFederationTimeDelta
exception.");
+ throw rti1516::RTIinternalError(msg->getExceptionReasonW());
+ } break ;
+
+ case e_InvalidLookahead: {
+ D.Out(pdExcept, "Throwing e_InvalidLookahead.");
+ throw rti1516::InvalidLookahead(msg->getExceptionReasonW());
+ } break ;
+
+ case e_InvalidObjectHandle: {
+ D.Out(pdExcept, "Throwing e_InvalidObjectHandle exception.");
+ throw rti1516::RTIinternalError(msg->getExceptionReasonW());
+ } break ;
+
+ case e_InvalidOrderingHandle: {
+ D.Out(pdExcept, "Throwing e_InvalidOrderingHandle exception.");
+ // JvY: Changed name of exception
+ throw rti1516::InvalidOrderType(msg->getExceptionReasonW());
+ } break ;
+
+ case e_InvalidResignAction: {
+ D.Out(pdExcept, "Throwing e_InvalidResignAction exception.");
+ // JvY: Changed name of exception
+ throw rti1516::RTIinternalError(msg->getExceptionReasonW());
+ } break ;
+
+ case e_InvalidRetractionHandle: {
+ D.Out(pdExcept, "Throwing e_InvalidRetractionHandle
exception.");
+ throw
rti1516::InvalidRetractionHandle(msg->getExceptionReasonW());
+ } break ;
+
+ case e_InvalidRoutingSpace: {
+ D.Out(pdExcept, "Throwing e_InvalidRoutingSpace exception.");
+ throw rti1516::RTIinternalError(msg->getExceptionReasonW());
+ } break ;
+
+ case e_InvalidTransportationHandle: {
+ D.Out(pdExcept, "Throwing e_InvalidTransportationHandle
exception.");
+ // JvY: Changed name of exception
+ throw
rti1516::InvalidTransportationType(msg->getExceptionReasonW());
+ } break ;
+
+ case e_MemoryExhausted: {
+ D.Out(pdExcept, "Throwing e_MemoryExhausted exception.");
+ // JvY: Changed name of exception
+ throw rti1516::RTIinternalError(msg->getExceptionReasonW());
+ } break ;
+
+ case e_NameNotFound: {
+ D.Out(pdExcept, "Throwing e_NameNotFound exception.");
+ throw rti1516::NameNotFound(msg->getExceptionReasonW());
+ } break ;
+
+ case e_NoPauseRequested: {
+ D.Out(pdExcept, "Throwing e_NoPauseRequested exception.");
+ throw rti1516::RTIinternalError(msg->getExceptionReasonW());
+ } break ;
+
+ case e_NoResumeRequested: {
+ D.Out(pdExcept, "Throwing e_NoResumeRequested exception.");
+ throw rti1516::RTIinternalError(msg->getExceptionReasonW());
+ } break ;
+
+ case e_ObjectClassNotDefined: {
+ D.Out(pdExcept, "Throwing e_ObjectClassNotDefined exception.");
+ throw
rti1516::ObjectClassNotDefined(msg->getExceptionReasonW());
+ } break ;
+
+ case e_ObjectClassNotKnown: {
+ D.Out(pdExcept, "Throwing e_ObjectClassNotKnown exception.");
+ throw rti1516::ObjectClassNotKnown(msg->getExceptionReasonW());
+ } break ;
+
+ case e_ObjectClassNotPublished: {
+ D.Out(pdExcept, "Throwing e_ObjectClassNotPublished
exception.");
+ throw
rti1516::ObjectClassNotPublished(msg->getExceptionReasonW());
+ } break ;
+
+ case e_ObjectClassNotSubscribed: {
+ D.Out(pdExcept, "Throwing e_ObjectClassNotSubscribed
exception.");
+ // JvY: Changed name of exception
+ throw rti1516::RTIinternalError(msg->getExceptionReasonW());
+ } break ;
+
+ case e_ObjectNotKnown: {
+ D.Out(pdExcept, "Throwing e_ObjectNotKnown exception.");
+ // JvY: Changed name of exception
+ throw
rti1516::ObjectInstanceNotKnown(msg->getExceptionReasonW());
+ } break ;
+
+ case e_ObjectAlreadyRegistered: {
+ D.Out(pdExcept, "Throwing e_ObjectAlreadyRegistered
exception.");
+ // JvY: Changed name of exception
+ throw
rti1516::ObjectInstanceNameInUse(msg->getExceptionReasonW());
+ } break ;
+
+ case e_RestoreInProgress: {
+ D.Out(pdExcept, "Throwing e_RestoreInProgress exception.");
+ throw rti1516::RestoreInProgress(msg->getExceptionReasonW());
+ } break ;
+
+ case e_RestoreNotRequested: {
+ D.Out(pdExcept, "Throwing e_RestoreNotRequested exception.");
+ throw rti1516::RestoreNotRequested(msg->getExceptionReasonW());
+ } break ;
+
+ case e_RTIinternalError: {
+ D.Out(pdExcept, "Throwing e_RTIinternalError exception.");
+ throw rti1516::RTIinternalError(msg->getExceptionReasonW());
+ } break ;
+
+ case e_SpaceNotDefined: {
+ D.Out(pdExcept, "Throwing e_SpaceNotDefined exception.");
+ // JvY: Changed name of exception
+ throw rti1516::RTIinternalError(msg->getExceptionReasonW());
+ } break ;
+
+ case e_SaveInProgress: {
+ D.Out(pdExcept, "Throwing e_SaveInProgress exception.");
+ throw rti1516::SaveInProgress(msg->getExceptionReasonW());
+ } break ;
+
+ case e_SaveNotInitiated: {
+ D.Out(pdExcept, "Throwing e_SaveNotInitiated exception.");
+ throw rti1516::SaveNotInitiated(msg->getExceptionReasonW());
+ } break ;
+
+ case e_SecurityError: {
+ D.Out(pdExcept, "Throwing e_SecurityError exception.");
+ throw rti1516::RTIinternalError(msg->getExceptionReasonW());
+ } break ;
+
+ case e_SpecifiedSaveLabelDoesNotExist: {
+ D.Out(pdExcept,
+ "Throwing e_SpecifiedSaveLabelDoesNotExist
exception.");
+ throw
rti1516::SpecifiedSaveLabelDoesNotExist(msg->getExceptionReasonW());
+ } break ;
+
+ case e_TimeAdvanceAlreadyInProgress: {
+ D.Out(pdExcept, "Throwing e_TimeAdvanceAlreadyInProgress
exception.");
+ // JvY: Changed name of exception
+ throw rti1516::RTIinternalError(msg->getExceptionReasonW());
+ } break ;
+
+ case e_TimeAdvanceWasNotInProgress: {
+ D.Out(pdExcept, "Throwing e_TimeAdvanceWasNotInProgress
exception.");
+ // JvY: Changed name of exception
+ throw rti1516::RTIinternalError(msg->getExceptionReasonW());
+ } break ;
+
+ case e_TooManyIDsRequested: {
+ D.Out(pdExcept, "Throwing e_TooManyIDsRequested exception.");
+ throw rti1516::RTIinternalError(msg->getExceptionReasonW());
+ } break ;
+
+ case e_UnableToPerformSave: {
+ D.Out(pdExcept, "Throwing e_UnableToPerformSave exception.");
+ throw rti1516::UnableToPerformSave(msg->getExceptionReasonW());
+ } break ;
+
+ case e_UnimplementedService: {
+ D.Out(pdExcept, "Throwing e_UnimplementedService exception.");
+ throw rti1516::RTIinternalError(msg->getExceptionReasonW());
+ } break ;
+
+ case e_UnknownLabel: {
+ D.Out(pdExcept, "Throwing e_UnknownLabel exception.");
+ throw rti1516::RTIinternalError(msg->getExceptionReasonW());
+ } break ;
+
+ case e_ValueCountExceeded: {
+ D.Out(pdExcept, "Throwing e_ValueCountExceeded exception.");
+ // JvY: Changed name of exception
+ throw rti1516::RTIinternalError(msg->getExceptionReasonW());
+ } break ;
+
+ case e_ValueLengthExceeded: {
+ D.Out(pdExcept, "Throwing e_ValueLengthExceeded exception.");
+ // JvY: Changed name of exception
+ throw rti1516::RTIinternalError(msg->getExceptionReasonW());
+ } break ;
+
+ case e_IllegalName: {
+ D.Out(pdExcept, "Throwing e_IllegalName exception.");
+ throw rti1516::IllegalName(msg->getExceptionReasonW());
+ } break;
+
+
+ default: {
+ D.Out(pdExcept, "Throwing unknown exception !");
+ std::cout << "LibRTI: Receiving unknown RTI exception." <<
std::endl;
+ throw rti1516::RTIinternalError(msg->getExceptionReasonW());
+ } break ;
+ }
+}
+
+#define CATCH_FEDERATE_AMBASSADOR_EXCEPTIONS(service) \
+ catch (rti1516::Exception &e) { \
+ std::wstringstream msg; \
+ msg << "Error in " << service << ": " << e.what(); \
+ throw rti1516::RTIinternalError(msg.str()); \
+ }
+
+void
+RTI1516ambPrivateRefs::callFederateAmbassador(Message *msg)
+throw (rti1516::RTIinternalError)
+{
+ switch (msg->getMessageType()) {
+
+ case Message::SYNCHRONIZATION_POINT_REGISTRATION_SUCCEEDED:
+ try {
+
fed_amb->synchronizationPointRegistrationSucceeded(msg->getLabelW());
+ }
+
CATCH_FEDERATE_AMBASSADOR_EXCEPTIONS(L"synchronizationPointRegistrationSucceeded")
+ break ;
+
+ case Message::SYNCHRONIZATION_POINT_REGISTRATION_FAILED:
+ try {
+
fed_amb->synchronizationPointRegistrationFailed(msg->getLabelW(),
rti1516::RTI_DETECTED_FAILURE_DURING_SYNCHRONIZATION);
+ }
+
CATCH_FEDERATE_AMBASSADOR_EXCEPTIONS(L"synchronizationPointRegistrationFailed")
+ break ;
+
+ case Message::ANNOUNCE_SYNCHRONIZATION_POINT:
+ try {
+ std::string tagString(msg->getTag());
+ rti1516::VariableLengthData
tagVarData(tagString.c_str(), tagString.length());
+
fed_amb->announceSynchronizationPoint(msg->getLabelW(),tagVarData);
+ }
+
CATCH_FEDERATE_AMBASSADOR_EXCEPTIONS(L"announceSynchronizationPoint")
+ break ;
+
+ case Message::FEDERATION_SYNCHRONIZED:
+ try {
+ fed_amb->federationSynchronized(msg->getLabelW());
+ }
+ CATCH_FEDERATE_AMBASSADOR_EXCEPTIONS(L"federationSynchronized")
+ break ;
+
+ case Message::INITIATE_FEDERATE_SAVE:
+ try {
+ fed_amb->initiateFederateSave((msg->getLabelW()));
+ }
+ CATCH_FEDERATE_AMBASSADOR_EXCEPTIONS(L"initiateFederateSave")
+ break ;
+
+ case Message::FEDERATION_SAVED:
+ try {
+ fed_amb->federationSaved();
+ }
+ CATCH_FEDERATE_AMBASSADOR_EXCEPTIONS(L"federationSaved")
+ break ;
+
+ case Message::REQUEST_FEDERATION_RESTORE_SUCCEEDED:
+ try {
+ fed_amb->requestFederationRestoreSucceeded(
+ (msg->getLabelW()));
+ }
+
CATCH_FEDERATE_AMBASSADOR_EXCEPTIONS(L"requestFederationRestoreSucceeded")
+ break ;
+
+ case Message::REQUEST_FEDERATION_RESTORE_FAILED:
+ try {
+
fed_amb->requestFederationRestoreFailed(msg->getLabelW());
+ }
+
CATCH_FEDERATE_AMBASSADOR_EXCEPTIONS(L"requestFederationRestoreFailed")
+ break ;
+
+ case Message::FEDERATION_RESTORE_BEGUN:
+ try {
+ fed_amb->federationRestoreBegun();
+ }
+ CATCH_FEDERATE_AMBASSADOR_EXCEPTIONS(L"federationRestoreBegun")
+ break ;
+
+ case Message::INITIATE_FEDERATE_RESTORE:
+ try {
+ M_Initiate_Federate_Restore *IFR =
static_cast<M_Initiate_Federate_Restore *>(msg);
+ rti1516::FederateHandle rti1516Handle =
rti1516::FederateHandleFriend::createRTI1516Handle(IFR->getFederate());
+ fed_amb->initiateFederateRestore((IFR->getLabelW()),
rti1516Handle);
+ }
+ CATCH_FEDERATE_AMBASSADOR_EXCEPTIONS(L"initiateFederateRestore")
+ break ;
+
+ case Message::FEDERATION_RESTORED:
+ try {
+ fed_amb->federationRestored();
+ }
+ CATCH_FEDERATE_AMBASSADOR_EXCEPTIONS(L"federationRestored")
+ break ;
+
+ case Message::FEDERATION_NOT_RESTORED:
+ try {
+ // TODO Need to know reason
+
fed_amb->federationNotRestored(rti1516::RTI_UNABLE_TO_RESTORE);
+ }
+ CATCH_FEDERATE_AMBASSADOR_EXCEPTIONS(L"federationNotRestored")
+ break ;
+
+ case Message::START_REGISTRATION_FOR_OBJECT_CLASS:
+ try {
+ rti1516::ObjectClassHandle rti1516Handle =
rti1516::ObjectClassHandleFriend::createRTI1516Handle(static_cast<M_Start_Registration_For_Object_Class
*>(msg)->getObjectClass());
+ fed_amb->startRegistrationForObjectClass(rti1516Handle);
+ }
+
CATCH_FEDERATE_AMBASSADOR_EXCEPTIONS(L"startRegistrationForObjectClass")
+ break ;
+
+ case Message::STOP_REGISTRATION_FOR_OBJECT_CLASS:
+ try {
+ rti1516::ObjectClassHandle rti1516Handle =
rti1516::ObjectClassHandleFriend::createRTI1516Handle(static_cast<M_Stop_Registration_For_Object_Class
*>(msg)->getObjectClass());
+ fed_amb->stopRegistrationForObjectClass(rti1516Handle);
+ }
+
CATCH_FEDERATE_AMBASSADOR_EXCEPTIONS(L"stopRegistrationForObjectClass")
+ break ;
+
+ case Message::TURN_INTERACTIONS_ON:
+ try {
+ rti1516::InteractionClassHandle rti1516Handle =
rti1516::InteractionClassHandleFriend::createRTI1516Handle(static_cast<M_Turn_Interactions_On
*>(msg)->getInteractionClass());
+ fed_amb->turnInteractionsOn(rti1516Handle);
+ }
+ CATCH_FEDERATE_AMBASSADOR_EXCEPTIONS(L"turnInteractionsOn")
+ break ;
+
+ case Message::TURN_INTERACTIONS_OFF:
+ try {
+ rti1516::InteractionClassHandle rti1516Handle =
rti1516::InteractionClassHandleFriend::createRTI1516Handle(static_cast<M_Turn_Interactions_Off
*>(msg)->getInteractionClass());
+ fed_amb->turnInteractionsOff(rti1516Handle);
+ }
+ CATCH_FEDERATE_AMBASSADOR_EXCEPTIONS(L"turnInteractionsOff")
+ break ;
+
+ case Message::DISCOVER_OBJECT_INSTANCE:
+ try {
+ M_Discover_Object_Instance* DOI =
static_cast<M_Discover_Object_Instance *>(msg);
+ rti1516::ObjectInstanceHandle objectInstance =
rti1516::ObjectInstanceHandleFriend::createRTI1516Handle(DOI->getObject());
+ rti1516::ObjectClassHandle objectClass =
rti1516::ObjectClassHandleFriend::createRTI1516Handle(DOI->getObjectClass());
+ std::string str = DOI->getObjectName();
+ std::wstring str2(str.length(), L' '); // Make room for
characters
+ // Copy string to wstring.
+ std::copy(str.begin(), str.end(), str2.begin());
+
+ fed_amb->discoverObjectInstance(objectInstance,
+ objectClass,
+ str2);
+ }
+ CATCH_FEDERATE_AMBASSADOR_EXCEPTIONS(L"discoverObjectInstance")
+ break ;
+
+ case Message::REFLECT_ATTRIBUTE_VALUES:
+ try {
+ M_Reflect_Attribute_Values* RAV =
static_cast<M_Reflect_Attribute_Values *>(msg);
+ G.Out(pdGendoc," tick_kernel call to
reflectAttributeValues");
+
+ rti1516::ObjectInstanceHandle instance =
rti1516::ObjectInstanceHandleFriend::createRTI1516Handle(RAV->getObject());
+
+ rti1516::AttributeHandleValueMap *attributes =
getAHVMFromRequest(RAV);
+
+ std::string tagString(msg->getTag());
+ rti1516::VariableLengthData
tagVarData(tagString.c_str(), tagString.length());
+
+ if (msg->isDated()) {
+ uint64_t sn = RAV->getEventRetraction().getSN();
+ certi::FederateHandle certiHandle =
RAV->getEventRetraction().getSendingFederate();
+ rti1516::MessageRetractionHandle event =
rti1516::MessageRetractionHandleFriend::createRTI1516Handle(certiHandle, sn);
+
+ std::auto_ptr < rti1516::LogicalTime > fedTime
(new RTI1516fedTime(msg->getDate().getTime()));
+
+ fed_amb->reflectAttributeValues(instance,
//ObjectInstanceHandle
+ *attributes,
//AttributeHandleValueMap &
+ tagVarData,
//VariableLengthData &
+ rti1516::TIMESTAMP,
//OrderType (send)
+ rti1516::RELIABLE,
//TransportationType
+ *fedTime,
//LogicalTime &
+ rti1516::RECEIVE,
//OrderType (receive)
+ event
//MessageRetractionHandle
+ );
+ }
+ else {
+ fed_amb->reflectAttributeValues(instance,
+ *attributes,
+ tagVarData,
+ rti1516::RECEIVE,
+ rti1516::RELIABLE);
+ }
+ delete attributes ;
+ }
+ CATCH_FEDERATE_AMBASSADOR_EXCEPTIONS(L"reflectAttributeValues")
+ break ;
+
+ case Message::RECEIVE_INTERACTION:
+ try {
+ M_Receive_Interaction* RI =
static_cast<M_Receive_Interaction *>(msg);
+ rti1516::ParameterHandleValueMap *parameters =
getPHVMFromRequest(RI);
+
+ rti1516::InteractionClassHandle interactionHandle =
rti1516::InteractionClassHandleFriend::createRTI1516Handle(RI->getInteractionClass());
+
+ std::string tagString(msg->getTag());
+ rti1516::VariableLengthData
tagVarData(tagString.c_str(), tagString.length());
+
+ if (msg->isDated()) {
+ uint64_t sn = RI->getEventRetraction().getSN();
+ certi::FederateHandle certiHandle =
RI->getEventRetraction().getSendingFederate();
+ rti1516::MessageRetractionHandle event =
rti1516::MessageRetractionHandleFriend::createRTI1516Handle(certiHandle, sn);
+
+ std::auto_ptr < rti1516::LogicalTime > fedTime
(new RTI1516fedTime(msg->getDate().getTime()));
+
+ fed_amb->receiveInteraction(
+ interactionHandle,
// InteractionClassHandle
+ *parameters,
// ParameterHandleValueMap &
+ tagVarData,
// VariableLengthData &
+ rti1516::TIMESTAMP,
//OrderType (send)
+ rti1516::RELIABLE,
//TransportationType
+ *fedTime,
//LogicalTime &
+ rti1516::RECEIVE,
//OrderType (receive)
+ event
//MessageRetractionHandle
+ );
+ }
+ else {
+ fed_amb->receiveInteraction(
+ interactionHandle,
+ *parameters,
+ tagVarData,
+ rti1516::RECEIVE,
+ rti1516::RELIABLE);
+ }
+ delete parameters ;
+ }
+ CATCH_FEDERATE_AMBASSADOR_EXCEPTIONS(L"receiveInteraction")
+ break ;
+
+ case Message::REMOVE_OBJECT_INSTANCE:
+ try {
+ M_Remove_Object_Instance* ROI =
static_cast<M_Remove_Object_Instance *>(msg);
+
+ rti1516::ObjectInstanceHandle instance =
rti1516::ObjectInstanceHandleFriend::createRTI1516Handle(ROI->getObject());
+
+ std::string tagString(msg->getTag());
+ rti1516::VariableLengthData
tagVarData(tagString.c_str(), tagString.length());
+
+ if (msg->isDated()) {
+ uint64_t sn = ROI->getEventRetraction().getSN();
+ certi::FederateHandle certiHandle =
ROI->getEventRetraction().getSendingFederate();
+ rti1516::MessageRetractionHandle event =
rti1516::MessageRetractionHandleFriend::createRTI1516Handle(certiHandle, sn);
+
+ std::auto_ptr < rti1516::LogicalTime > fedTime
(new RTI1516fedTime(msg->getDate().getTime()));
+
+ fed_amb->removeObjectInstance(
+ instance,
+ tagVarData,
+ rti1516::TIMESTAMP,
+ *fedTime,
+ rti1516::RECEIVE,
+ event);
+ }
+ else {
+ fed_amb->removeObjectInstance(
+ instance,
+ tagVarData,
+ rti1516::RECEIVE);
+ }
+ }
+ CATCH_FEDERATE_AMBASSADOR_EXCEPTIONS(L"removeObjectInstance")
+ break ;
+
+ case Message::PROVIDE_ATTRIBUTE_VALUE_UPDATE:
+ try {
+ M_Provide_Attribute_Value_Update* PAVU =
static_cast<M_Provide_Attribute_Value_Update *>(msg);
+
+ rti1516::AttributeHandleSet *attributeSet =
getAHSFromRequest(PAVU);
+
+ rti1516::ObjectInstanceHandle instance =
rti1516::ObjectInstanceHandleFriend::createRTI1516Handle(PAVU->getObject());
+
+ std::string tag = PAVU->getTag();
+ rti1516::VariableLengthData tagVarData(tag.c_str(),
tag.size());
+
+
fed_amb->provideAttributeValueUpdate(instance,*attributeSet, tagVarData);
+ delete attributeSet ;
+ }
+
CATCH_FEDERATE_AMBASSADOR_EXCEPTIONS(L"provideAttributeValueUpdate")
+ break ;
+
+ case Message::REQUEST_RETRACTION: {
+
+ } break ;
+
+ case Message::REQUEST_ATTRIBUTE_OWNERSHIP_ASSUMPTION:
+ try {
+ M_Request_Attribute_Ownership_Assumption* RAOA =
static_cast<M_Request_Attribute_Ownership_Assumption *>(msg);
+ rti1516::AttributeHandleSet *attributeSet =
getAHSFromRequest(RAOA);
+
+ rti1516::ObjectInstanceHandle instance =
rti1516::ObjectInstanceHandleFriend::createRTI1516Handle(RAOA->getObject());
+
+ std::string tag = RAOA->getTag();
+ rti1516::VariableLengthData tagVarData(tag.c_str(),
tag.size());
+
+ fed_amb->
+ requestAttributeOwnershipAssumption(instance,
+ *attributeSet,
+ tagVarData);
+ delete attributeSet ;
+ }
+
CATCH_FEDERATE_AMBASSADOR_EXCEPTIONS(L"requestAttributeOwnershipAssumption")
+ break ;
+
+ case Message::REQUEST_ATTRIBUTE_OWNERSHIP_RELEASE:
+ try {
+ M_Request_Attribute_Ownership_Release* RAOR =
static_cast<M_Request_Attribute_Ownership_Release *>(msg);
+ rti1516::AttributeHandleSet *attributeSet =
getAHSFromRequest(RAOR);
+
+ rti1516::ObjectInstanceHandle instance =
rti1516::ObjectInstanceHandleFriend::createRTI1516Handle(RAOR->getObject());
+
+ std::string tag = RAOR->getTag();
+ rti1516::VariableLengthData tagVarData(tag.c_str(),
tag.size());
+
+ fed_amb->requestAttributeOwnershipRelease(
+ instance,
+ *attributeSet,
+ tagVarData);
+
+ delete attributeSet ;
+ }
+
CATCH_FEDERATE_AMBASSADOR_EXCEPTIONS(L"requestAttributeOwnershipRelease")
+ break ;
+
+ case Message::ATTRIBUTE_OWNERSHIP_UNAVAILABLE:
+ try {
+ M_Attribute_Ownership_Unavailable* AOU =
static_cast<M_Attribute_Ownership_Unavailable *>(msg);
+
+ rti1516::AttributeHandleSet *attributeSet =
getAHSFromRequest(AOU);
+
+ rti1516::ObjectInstanceHandle instance =
rti1516::ObjectInstanceHandleFriend::createRTI1516Handle(AOU->getObject());
+
+ fed_amb->attributeOwnershipUnavailable(instance,
+ *attributeSet);
+
+ delete attributeSet ;
+ }
+
CATCH_FEDERATE_AMBASSADOR_EXCEPTIONS(L"attributeOwnershipUnavailable")
+ break ;
+
+ case Message::ATTRIBUTE_OWNERSHIP_ACQUISITION_NOTIFICATION:
+ try {
+ M_Attribute_Ownership_Acquisition_Notification* AOAN =
static_cast<M_Attribute_Ownership_Acquisition_Notification *>(msg);
+
+ rti1516::AttributeHandleSet *attributeSet =
getAHSFromRequest(AOAN);
+
+ rti1516::ObjectInstanceHandle instance =
rti1516::ObjectInstanceHandleFriend::createRTI1516Handle(AOAN->getObject());
+
+ std::string tag = AOAN->getTag();
+ rti1516::VariableLengthData tagVarData(tag.c_str(),
tag.size());
+
+ fed_amb->attributeOwnershipAcquisitionNotification(
+ instance,
+ *attributeSet,
+ tagVarData);
+
+ delete attributeSet ;
+ }
+
CATCH_FEDERATE_AMBASSADOR_EXCEPTIONS(L"attributeOwnershipAcquisitionNotification")
+ break ;
+
+ case Message::ATTRIBUTE_OWNERSHIP_DIVESTITURE_NOTIFICATION:
+ try {
+ M_Attribute_Ownership_Divestiture_Notification* AODN =
static_cast<M_Attribute_Ownership_Divestiture_Notification *>(msg);
+
+ rti1516::AttributeHandleSet *attributeSet =
getAHSFromRequest(AODN);
+
+ rti1516::ObjectInstanceHandle instance =
rti1516::ObjectInstanceHandleFriend::createRTI1516Handle(AODN->getObject());
+
+ // requestDivestitureConfirmation = 7.5, en zou
ontbreken in 1.3. JRE: klopt dit wel?
+ // Changed function name! Originally:
attributeOwnershipDivestitureNotification
+ fed_amb->requestDivestitureConfirmation(
+ instance,
+ *attributeSet);
+
+ delete attributeSet ;
+ }
+
CATCH_FEDERATE_AMBASSADOR_EXCEPTIONS(L"attributeOwnershipDivestitureNotification")
+ break ;
+
+ case Message::CONFIRM_ATTRIBUTE_OWNERSHIP_ACQUISITION_CANCELLATION:
+ try {
+ M_Confirm_Attribute_Ownership_Acquisition_Cancellation*
CAOAC = static_cast<M_Confirm_Attribute_Ownership_Acquisition_Cancellation
*>(msg);
+
+ rti1516::AttributeHandleSet *attributeSet =
getAHSFromRequest(CAOAC);
+
+ rti1516::ObjectInstanceHandle instance =
rti1516::ObjectInstanceHandleFriend::createRTI1516Handle(CAOAC->getObject());
+
+
fed_amb->confirmAttributeOwnershipAcquisitionCancellation(
+ instance,
+ *attributeSet);
+
+ delete attributeSet ;
+ }
+
CATCH_FEDERATE_AMBASSADOR_EXCEPTIONS(L"confirmAttributeOwnershipAcquisitionCancellation")
+ break ;
+
+ case Message::INFORM_ATTRIBUTE_OWNERSHIP:
+ try {
+ M_Inform_Attribute_Ownership* IAO =
static_cast<M_Inform_Attribute_Ownership *>(msg);
+ rti1516::ObjectInstanceHandle instance =
rti1516::ObjectInstanceHandleFriend::createRTI1516Handle(IAO->getObject());
+ rti1516::AttributeHandle attribute =
rti1516::AttributeHandleFriend::createRTI1516Handle(IAO->getAttribute());
+ rti1516::FederateHandle federate =
rti1516::FederateHandleFriend::createRTI1516Handle(IAO->getFederate());
+
+ fed_amb->
+ informAttributeOwnership(
+ instance,
+ attribute,
+ federate);
+ }
+
CATCH_FEDERATE_AMBASSADOR_EXCEPTIONS(L"informAttributeOwnership")
+ break ;
+
+ case Message::ATTRIBUTE_IS_NOT_OWNED:
+ try {
+ M_Attribute_Is_Not_Owned* AINO =
static_cast<M_Attribute_Is_Not_Owned *>(msg);
+ rti1516::ObjectInstanceHandle instance =
rti1516::ObjectInstanceHandleFriend::createRTI1516Handle(AINO->getObject());
+ rti1516::AttributeHandle attribute =
rti1516::AttributeHandleFriend::createRTI1516Handle(AINO->getAttribute());
+
+ fed_amb->attributeIsNotOwned(
+ instance,
+ attribute);
+ }
+ CATCH_FEDERATE_AMBASSADOR_EXCEPTIONS(L"attributeIsNotOwned")
+ break ;
+
+ case Message::TIME_ADVANCE_GRANT:
+ try {
+
fed_amb->timeAdvanceGrant(RTI1516fedTime(msg->getDate().getTime()));
+ }
+ CATCH_FEDERATE_AMBASSADOR_EXCEPTIONS(L"timeAdvanceGrant")
+ break ;
+
+ case Message::TIME_REGULATION_ENABLED:
+ try {
+ std::auto_ptr < rti1516::LogicalTime > fedTime (new
RTI1516fedTime(msg->getDate().getTime()));
+ fed_amb->timeRegulationEnabled(*fedTime);
+ }
+ CATCH_FEDERATE_AMBASSADOR_EXCEPTIONS(L"timeRegulationEnabled")
+ break ;
+
+ case Message::TIME_CONSTRAINED_ENABLED:
+ try {
+ std::auto_ptr < rti1516::LogicalTime > fedTime (new
RTI1516fedTime(msg->getDate().getTime()));
+ fed_amb->timeConstrainedEnabled(*fedTime);
+ }
+ CATCH_FEDERATE_AMBASSADOR_EXCEPTIONS(L"timeConstrainedEnabled")
+ break ;
+
+ case Message::RESERVE_OBJECT_INSTANCE_NAME_SUCCEEDED:
+ try {
+ M_Reserve_Object_Instance_Name_Succeeded* ROINS =
static_cast<M_Reserve_Object_Instance_Name_Succeeded *>(msg);
+ std::string objName_s(ROINS->getObjectName());
+ std::wstring objName_ws(objName_s.begin(),
objName_s.end());
+
+
fed_amb->objectInstanceNameReservationSucceeded(objName_ws);
+ }
+
CATCH_FEDERATE_AMBASSADOR_EXCEPTIONS(L"reserveObjectInstanceNameSucceeded")
+ break;
+
+ case Message::RESERVE_OBJECT_INSTANCE_NAME_FAILED:
+ try {
+ M_Reserve_Object_Instance_Name_Failed* ROINS =
static_cast<M_Reserve_Object_Instance_Name_Failed *>(msg);
+ std::string objName_s(ROINS->getObjectName());
+ std::wstring objName_ws(objName_s.begin(),
objName_s.end());
+
+
fed_amb->objectInstanceNameReservationFailed(objName_ws);
+ }
+
CATCH_FEDERATE_AMBASSADOR_EXCEPTIONS(L"reserveObjectInstanceNameFailed")
+ break;
+
+ default:
+ leave("RTI service requested by RTI is unknown.");
+ }
+}
+
+// $Id: RTIambPrivateRefs.cpp,v 1.1 2014/03/06 16:11:32 erk Exp $
Index: libRTI/ieee1516-2010/RTIfedAmbassador.cpp
===================================================================
RCS file: libRTI/ieee1516-2010/RTIfedAmbassador.cpp
diff -N libRTI/ieee1516-2010/RTIfedAmbassador.cpp
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ libRTI/ieee1516-2010/RTIfedAmbassador.cpp 6 Mar 2014 16:11:32 -0000
1.1
@@ -0,0 +1,32 @@
+// ----------------------------------------------------------------------------
+// CERTI - HLA RunTime Infrastructure
+// Copyright (C) 2002-2014 ONERA
+//
+// This file is part of CERTI-libRTI
+//
+// CERTI-libRTI is free software ; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public License
+// as published by the Free Software Foundation ; either version 2 of
+// the License, or (at your option) any later version.
+//
+// CERTI-libRTI 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
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this program ; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA
+//
+// ----------------------------------------------------------------------------
+#include <RTI/FederateAmbassador.h>
+#include <RTI/NullFederateAmbassador.h>
+
+rti1516e::FederateAmbassador::FederateAmbassador() throw
(FederateInternalError)
+{
+}
+
+rti1516e::FederateAmbassador::~FederateAmbassador() throw()
+{
+}
Index: libRTI/ieee1516-2010/RTIambassadorImplementation.h
===================================================================
RCS file: libRTI/ieee1516-2010/RTIambassadorImplementation.h
diff -N libRTI/ieee1516-2010/RTIambassadorImplementation.h
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ libRTI/ieee1516-2010/RTIambassadorImplementation.h 6 Mar 2014 16:11:32
-0000 1.1
@@ -0,0 +1,1341 @@
+// ----------------------------------------------------------------------------
+// CERTI - HLA RunTime Infrastructure
+// Copyright (C) 2002-2014 ONERA
+//
+// This file is part of CERTI-libRTI
+//
+// CERTI-libRTI is free software ; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public License
+// as published by the Free Software Foundation ; either version 2 of
+// the License, or (at your option) any later version.
+//
+// CERTI-libRTI 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
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this program ; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA
+//
+// ----------------------------------------------------------------------------
+// This interface is used to access the services of the RTI.
+
+#ifndef RTIambassador_h
+#define RTIambassador_h
+
+#include <RTI/RTIambassador.h>
+#include <RTI/RTIambassadorFactory.h>
+#include "RTIambassadorImplementation.h"
+#include "RTIambPrivateRefs.h"
+
+namespace certi
+{
+class RTI_EXPORT RTI1516ambassador : rti1516e::RTIambassador
+{
+ friend std::auto_ptr< rti1516e::RTIambassador >
+ rti1516e::RTIambassadorFactory::createRTIambassador(std::vector<
std::wstring > & args)
+ throw (rti1516e::BadInitializationParameter, rti1516e::RTIinternalError);
+
+private:
+ RTI1516ambPrivateRefs* privateRefs ;
+
+ // Helper functions
+ template<typename T> void
+ assignAHSAndExecuteService(const rti1516e::AttributeHandleSet &AHS, T
&req, T &rep);
+ template<typename T> void
+ assignPHVMAndExecuteService(const rti1516e::ParameterHandleValueMap &PHVM,
T &req, T &rep);
+ template<typename T> void
+ assignAHVMAndExecuteService(const rti1516e::AttributeHandleValueMap &AHVM,
T &req, T &rep);
+ // Helper function for CallBacks
+ bool __tick_kernel(bool, TickTime, TickTime)
+ throw (rti1516e::SpecifiedSaveLabelDoesNotExist,
rti1516e::RTIinternalError);
+
+protected:
+ RTI1516ambassador()
+throw ();
+
+public:
+ virtual
+ ~RTI1516ambassador();
+ // throw ()
+
+ // 4.2
+ virtual void createFederationExecution
+ (std::wstring const & federationExecutionName,
+ std::wstring const & fullPathNameToTheFDDfile,
+ std::wstring const & logicalTimeImplementationName = L"")
+ throw (rti1516e::FederationExecutionAlreadyExists,
+ rti1516e::CouldNotOpenFDD,
+ rti1516e::ErrorReadingFDD,
+ rti1516e::CouldNotCreateLogicalTimeFactory,
+ rti1516e::RTIinternalError);
+
+ // 4.3
+ virtual void destroyFederationExecution
+ (std::wstring const & federationExecutionName)
+ throw (rti1516e::FederatesCurrentlyJoined,
+ rti1516e::FederationExecutionDoesNotExist,
+ rti1516e::RTIinternalError);
+
+ // 4.4
+ virtual rti1516e::FederateHandle joinFederationExecution
+ (std::wstring const & federateType,
+ std::wstring const & federationExecutionName,
+ rti1516e::FederateAmbassador & federateAmbassador)
+ throw (rti1516e::FederateAlreadyExecutionMember,
+ rti1516e::FederationExecutionDoesNotExist,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::CouldNotCreateLogicalTimeFactory,
+ rti1516e::RTIinternalError);
+
+ // 4.5
+ virtual void resignFederationExecution
+ (rti1516e::ResignAction resignAction)
+ throw (rti1516e::OwnershipAcquisitionPending,
+ rti1516e::FederateOwnsAttributes,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::RTIinternalError);
+
+ // 4.6
+ virtual void registerFederationSynchronizationPoint
+ (std::wstring const & label,
+ rti1516e::VariableLengthData const & theUserSuppliedTag)
+ throw (rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ virtual void registerFederationSynchronizationPoint
+ (std::wstring const & label,
+ rti1516e::VariableLengthData const & theUserSuppliedTag,
+ rti1516e::FederateHandleSet const & syncSet)
+ throw (rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ // 4.9
+ virtual void synchronizationPointAchieved
+ (std::wstring const & label)
+ throw (rti1516e::SynchronizationPointLabelNotAnnounced,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ // 4.11
+ virtual void requestFederationSave
+ (std::wstring const & label)
+ throw (rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ virtual void requestFederationSave
+ (std::wstring const & label,
+ rti1516e::LogicalTime const & theTime)
+ throw (rti1516e::LogicalTimeAlreadyPassed,
+ rti1516e::InvalidLogicalTime,
+ rti1516e::FederateUnableToUseTime,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ // 4.13
+ virtual void federateSaveBegun ()
+ throw (rti1516e::SaveNotInitiated,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ // 4.14
+ virtual void federateSaveComplete ()
+ throw (rti1516e::FederateHasNotBegunSave,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ virtual void federateSaveNotComplete()
+ throw (rti1516e::FederateHasNotBegunSave,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ // 4.16
+ virtual void queryFederationSaveStatus ()
+ throw (rti1516e::FederateNotExecutionMember,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ // 4.18
+ virtual void requestFederationRestore
+ (std::wstring const & label)
+ throw (rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ // 4.22
+ virtual void federateRestoreComplete ()
+ throw (rti1516e::RestoreNotRequested,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RTIinternalError);
+
+ virtual void federateRestoreNotComplete ()
+ throw (rti1516e::RestoreNotRequested,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RTIinternalError);
+
+ // 4.24
+ virtual void queryFederationRestoreStatus ()
+ throw (rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RTIinternalError);
+
+ /////////////////////////////////////
+ // Declaration Management Services //
+ /////////////////////////////////////
+
+ // 5.2
+ virtual void publishObjectClassAttributes
+ (rti1516e::ObjectClassHandle theClass,
+ rti1516e::AttributeHandleSet const & attributeList)
+ throw (rti1516e::ObjectClassNotDefined,
+ rti1516e::AttributeNotDefined,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ // 5.3
+ virtual void unpublishObjectClass
+ (rti1516e::ObjectClassHandle theClass)
+ throw (rti1516e::ObjectClassNotDefined,
+ rti1516e::OwnershipAcquisitionPending,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ virtual void unpublishObjectClassAttributes
+ (rti1516e::ObjectClassHandle theClass,
+ rti1516e::AttributeHandleSet const & attributeList)
+ throw (rti1516e::ObjectClassNotDefined,
+ rti1516e::AttributeNotDefined,
+ rti1516e::OwnershipAcquisitionPending,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ // 5.4
+ virtual void publishInteractionClass
+ (rti1516e::InteractionClassHandle theInteraction)
+ throw (rti1516e::InteractionClassNotDefined,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ // 5.5
+ virtual void unpublishInteractionClass
+ (rti1516e::InteractionClassHandle theInteraction)
+ throw (rti1516e::InteractionClassNotDefined,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ // 5.6
+ virtual void subscribeObjectClassAttributes
+ (rti1516e::ObjectClassHandle theClass,
+ rti1516e::AttributeHandleSet const & attributeList,
+ bool active = true)
+ throw (rti1516e::ObjectClassNotDefined,
+ rti1516e::AttributeNotDefined,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ // 5.7
+ virtual void unsubscribeObjectClass
+ (rti1516e::ObjectClassHandle theClass)
+ throw (rti1516e::ObjectClassNotDefined,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ virtual void unsubscribeObjectClassAttributes
+ (rti1516e::ObjectClassHandle theClass,
+ rti1516e::AttributeHandleSet const & attributeList)
+ throw (rti1516e::ObjectClassNotDefined,
+ rti1516e::AttributeNotDefined,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ // 5.8
+ virtual void subscribeInteractionClass
+ (rti1516e::InteractionClassHandle theClass,
+ bool active = true)
+ throw (rti1516e::InteractionClassNotDefined,
+ rti1516e::FederateServiceInvocationsAreBeingReportedViaMOM,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ // 5.9
+ virtual void unsubscribeInteractionClass
+ (rti1516e::InteractionClassHandle theClass)
+ throw (rti1516e::InteractionClassNotDefined,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ ////////////////////////////////
+ // Object Management Services //
+ ////////////////////////////////
+
+ // 6.2
+ virtual void reserveObjectInstanceName
+ (std::wstring const & theObjectInstanceName)
+ throw (rti1516e::IllegalName,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ // 6.4
+ virtual rti1516e::ObjectInstanceHandle registerObjectInstance
+ (rti1516e::ObjectClassHandle theClass)
+ throw (rti1516e::ObjectClassNotDefined,
+ rti1516e::ObjectClassNotPublished,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ virtual rti1516e::ObjectInstanceHandle registerObjectInstance
+ (rti1516e::ObjectClassHandle theClass,
+ std::wstring const & theObjectInstanceName)
+ throw (rti1516e::ObjectClassNotDefined,
+ rti1516e::ObjectClassNotPublished,
+ rti1516e::ObjectInstanceNameNotReserved,
+ rti1516e::ObjectInstanceNameInUse,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ // 6.6
+ virtual void updateAttributeValues
+ (rti1516e::ObjectInstanceHandle theObject,
+ rti1516e::AttributeHandleValueMap const & theAttributeValues,
+ rti1516e::VariableLengthData const & theUserSuppliedTag)
+ throw (rti1516e::ObjectInstanceNotKnown,
+ rti1516e::AttributeNotDefined,
+ rti1516e::AttributeNotOwned,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ virtual rti1516e::MessageRetractionHandle updateAttributeValues
+ (rti1516e::ObjectInstanceHandle theObject,
+ rti1516e::AttributeHandleValueMap const & theAttributeValues,
+ rti1516e::VariableLengthData const & theUserSuppliedTag,
+ rti1516e::LogicalTime const & theTime)
+ throw (rti1516e::ObjectInstanceNotKnown,
+ rti1516e::AttributeNotDefined,
+ rti1516e::AttributeNotOwned,
+ rti1516e::InvalidLogicalTime,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ // 6.8
+ virtual void sendInteraction
+ (rti1516e::InteractionClassHandle theInteraction,
+ rti1516e::ParameterHandleValueMap const & theParameterValues,
+ rti1516e::VariableLengthData const & theUserSuppliedTag)
+ throw (rti1516e::InteractionClassNotPublished,
+ rti1516e::InteractionClassNotDefined,
+ rti1516e::InteractionParameterNotDefined,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ virtual rti1516e::MessageRetractionHandle sendInteraction
+ (rti1516e::InteractionClassHandle theInteraction,
+ rti1516e::ParameterHandleValueMap const & theParameterValues,
+ rti1516e::VariableLengthData const & theUserSuppliedTag,
+ rti1516e::LogicalTime const & theTime)
+ throw (rti1516e::InteractionClassNotPublished,
+ rti1516e::InteractionClassNotDefined,
+ rti1516e::InteractionParameterNotDefined,
+ rti1516e::InvalidLogicalTime,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ // 6.10
+ virtual void deleteObjectInstance
+ (rti1516e::ObjectInstanceHandle theObject,
+ rti1516e::VariableLengthData const & theUserSuppliedTag)
+ throw (rti1516e::DeletePrivilegeNotHeld,
+ rti1516e::ObjectInstanceNotKnown,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ virtual rti1516e::MessageRetractionHandle deleteObjectInstance
+ (rti1516e::ObjectInstanceHandle theObject,
+ rti1516e::VariableLengthData const & theUserSuppliedTag,
+ rti1516e::LogicalTime const & theTime)
+ throw (rti1516e::DeletePrivilegeNotHeld,
+ rti1516e::ObjectInstanceNotKnown,
+ rti1516e::InvalidLogicalTime,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ // 6.12
+ virtual void localDeleteObjectInstance
+ (rti1516e::ObjectInstanceHandle theObject)
+ throw (rti1516e::ObjectInstanceNotKnown,
+ rti1516e::FederateOwnsAttributes,
+ rti1516e::OwnershipAcquisitionPending,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ // 6.13
+ virtual void changeAttributeTransportationType
+ (rti1516e::ObjectInstanceHandle theObject,
+ rti1516e::AttributeHandleSet const & theAttributes,
+ rti1516e::TransportationType theType)
+ throw (rti1516e::ObjectInstanceNotKnown,
+ rti1516e::AttributeNotDefined,
+ rti1516e::AttributeNotOwned,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ // 6.14
+ virtual void changeInteractionTransportationType
+ (rti1516e::InteractionClassHandle theClass,
+ rti1516e::TransportationType theType)
+ throw (rti1516e::InteractionClassNotDefined,
+ rti1516e::InteractionClassNotPublished,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ // 6.17
+ virtual void requestAttributeValueUpdate
+ (rti1516e::ObjectInstanceHandle theObject,
+ rti1516e::AttributeHandleSet const & theAttributes,
+ rti1516e::VariableLengthData const & theUserSuppliedTag)
+ throw (rti1516e::ObjectInstanceNotKnown,
+ rti1516e::AttributeNotDefined,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ virtual void requestAttributeValueUpdate
+ (rti1516e::ObjectClassHandle theClass,
+ rti1516e::AttributeHandleSet const & theAttributes,
+ rti1516e::VariableLengthData const & theUserSuppliedTag)
+ throw (rti1516e::ObjectClassNotDefined,
+ rti1516e::AttributeNotDefined,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ ///////////////////////////////////
+ // Ownership Management Services //
+ ///////////////////////////////////
+ // 7.2
+ virtual void unconditionalAttributeOwnershipDivestiture
+ (rti1516e::ObjectInstanceHandle theObject,
+ rti1516e::AttributeHandleSet const & theAttributes)
+ throw (rti1516e::ObjectInstanceNotKnown,
+ rti1516e::AttributeNotDefined,
+ rti1516e::AttributeNotOwned,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ // 7.3
+ virtual void negotiatedAttributeOwnershipDivestiture
+ (rti1516e::ObjectInstanceHandle theObject,
+ rti1516e::AttributeHandleSet const & theAttributes,
+ rti1516e::VariableLengthData const & theUserSuppliedTag)
+ throw (rti1516e::ObjectInstanceNotKnown,
+ rti1516e::AttributeNotDefined,
+ rti1516e::AttributeNotOwned,
+ rti1516e::AttributeAlreadyBeingDivested,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ // 7.6
+ virtual void confirmDivestiture
+ (rti1516e::ObjectInstanceHandle theObject,
+ rti1516e::AttributeHandleSet const & confirmedAttributes,
+ rti1516e::VariableLengthData const & theUserSuppliedTag)
+ throw (rti1516e::ObjectInstanceNotKnown,
+ rti1516e::AttributeNotDefined,
+ rti1516e::AttributeNotOwned,
+ rti1516e::AttributeDivestitureWasNotRequested,
+ rti1516e::NoAcquisitionPending,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ // 7.8
+ virtual void attributeOwnershipAcquisition
+ (rti1516e::ObjectInstanceHandle theObject,
+ rti1516e::AttributeHandleSet const & desiredAttributes,
+ rti1516e::VariableLengthData const & theUserSuppliedTag)
+ throw (rti1516e::ObjectInstanceNotKnown,
+ rti1516e::ObjectClassNotPublished,
+ rti1516e::AttributeNotDefined,
+ rti1516e::AttributeNotPublished,
+ rti1516e::FederateOwnsAttributes,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ // 7.9
+ virtual void attributeOwnershipAcquisitionIfAvailable
+ (rti1516e::ObjectInstanceHandle theObject,
+ rti1516e::AttributeHandleSet const & desiredAttributes)
+ throw (rti1516e::ObjectInstanceNotKnown,
+ rti1516e::ObjectClassNotPublished,
+ rti1516e::AttributeNotDefined,
+ rti1516e::AttributeNotPublished,
+ rti1516e::FederateOwnsAttributes,
+ rti1516e::AttributeAlreadyBeingAcquired,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ // 7.12
+ virtual void attributeOwnershipDivestitureIfWanted
+ (rti1516e::ObjectInstanceHandle theObject,
+ rti1516e::AttributeHandleSet const & theAttributes,
+ rti1516e::AttributeHandleSet & theDivestedAttributes) // filled by
RTI
+ throw (rti1516e::ObjectInstanceNotKnown,
+ rti1516e::AttributeNotDefined,
+ rti1516e::AttributeNotOwned,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ // 7.13
+ virtual void cancelNegotiatedAttributeOwnershipDivestiture
+ (rti1516e::ObjectInstanceHandle theObject,
+ rti1516e::AttributeHandleSet const & theAttributes)
+ throw (rti1516e::ObjectInstanceNotKnown,
+ rti1516e::AttributeNotDefined,
+ rti1516e::AttributeNotOwned,
+ rti1516e::AttributeDivestitureWasNotRequested,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ // 7.14
+ virtual void cancelAttributeOwnershipAcquisition
+ (rti1516e::ObjectInstanceHandle theObject,
+ rti1516e::AttributeHandleSet const & theAttributes)
+ throw (rti1516e::ObjectInstanceNotKnown,
+ rti1516e::AttributeNotDefined,
+ rti1516e::AttributeAlreadyOwned,
+ rti1516e::AttributeAcquisitionWasNotRequested,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ // 7.16
+ virtual void queryAttributeOwnership
+ (rti1516e::ObjectInstanceHandle theObject,
+ rti1516e::AttributeHandle theAttribute)
+ throw (rti1516e::ObjectInstanceNotKnown,
+ rti1516e::AttributeNotDefined,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ // 7.18
+ virtual bool isAttributeOwnedByFederate
+ (rti1516e::ObjectInstanceHandle theObject,
+ rti1516e::AttributeHandle theAttribute)
+ throw (rti1516e::ObjectInstanceNotKnown,
+ rti1516e::AttributeNotDefined,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ //////////////////////////////
+ // Time Management Services //
+ //////////////////////////////
+
+ // 8.2
+ virtual void enableTimeRegulation
+ (rti1516e::LogicalTimeInterval const & theLookahead)
+ throw (rti1516e::TimeRegulationAlreadyEnabled,
+ rti1516e::InvalidLookahead,
+ rti1516e::InTimeAdvancingState,
+ rti1516e::RequestForTimeRegulationPending,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ // 8.4
+ virtual void disableTimeRegulation ()
+ throw (rti1516e::TimeRegulationIsNotEnabled,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ // 8.5
+ virtual void enableTimeConstrained ()
+ throw (rti1516e::TimeConstrainedAlreadyEnabled,
+ rti1516e::InTimeAdvancingState,
+ rti1516e::RequestForTimeConstrainedPending,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ // 8.7
+ virtual void disableTimeConstrained ()
+ throw (rti1516e::TimeConstrainedIsNotEnabled,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ // 8.8
+ virtual void timeAdvanceRequest
+ (rti1516e::LogicalTime const & theTime)
+ throw (rti1516e::InvalidLogicalTime,
+ rti1516e::LogicalTimeAlreadyPassed,
+ rti1516e::InTimeAdvancingState,
+ rti1516e::RequestForTimeRegulationPending,
+ rti1516e::RequestForTimeConstrainedPending,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ // 8.9
+ virtual void timeAdvanceRequestAvailable
+ (rti1516e::LogicalTime const & theTime)
+ throw (rti1516e::InvalidLogicalTime,
+ rti1516e::LogicalTimeAlreadyPassed,
+ rti1516e::InTimeAdvancingState,
+ rti1516e::RequestForTimeRegulationPending,
+ rti1516e::RequestForTimeConstrainedPending,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ // 8.10
+ virtual void nextMessageRequest
+ (rti1516e::LogicalTime const & theTime)
+ throw (rti1516e::InvalidLogicalTime,
+ rti1516e::LogicalTimeAlreadyPassed,
+ rti1516e::InTimeAdvancingState,
+ rti1516e::RequestForTimeRegulationPending,
+ rti1516e::RequestForTimeConstrainedPending,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ // 8.11
+ virtual void nextMessageRequestAvailable
+ (rti1516e::LogicalTime const & theTime)
+ throw (rti1516e::InvalidLogicalTime,
+ rti1516e::LogicalTimeAlreadyPassed,
+ rti1516e::InTimeAdvancingState,
+ rti1516e::RequestForTimeRegulationPending,
+ rti1516e::RequestForTimeConstrainedPending,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ // 8.12
+ virtual void flushQueueRequest
+ (rti1516e::LogicalTime const & theTime)
+ throw (rti1516e::InvalidLogicalTime,
+ rti1516e::LogicalTimeAlreadyPassed,
+ rti1516e::InTimeAdvancingState,
+ rti1516e::RequestForTimeRegulationPending,
+ rti1516e::RequestForTimeConstrainedPending,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ // 8.14
+ virtual void enableAsynchronousDelivery ()
+ throw (rti1516e::AsynchronousDeliveryAlreadyEnabled,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ // 8.15
+ virtual void disableAsynchronousDelivery ()
+ throw (rti1516e::AsynchronousDeliveryAlreadyDisabled,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ // 8.16
+ virtual bool queryGALT (rti1516e::LogicalTime & theTime)
+ throw (rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ // 8.17
+ virtual void queryLogicalTime (rti1516e::LogicalTime & theTime)
+ throw (rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ // 8.18
+ virtual bool queryLITS (rti1516e::LogicalTime & theTime)
+ throw (rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ // 8.19
+ virtual void modifyLookahead
+ (rti1516e::LogicalTimeInterval const & theLookahead)
+ throw (rti1516e::TimeRegulationIsNotEnabled,
+ rti1516e::InvalidLookahead,
+ rti1516e::InTimeAdvancingState,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ // 8.20
+ virtual void queryLookahead (rti1516e::LogicalTimeInterval & interval)
+ throw (rti1516e::TimeRegulationIsNotEnabled,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ // 8.21
+ virtual void retract
+ (rti1516e::MessageRetractionHandle theHandle)
+ throw (rti1516e::InvalidRetractionHandle,
+ rti1516e::TimeRegulationIsNotEnabled,
+ rti1516e::MessageCanNoLongerBeRetracted,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ // 8.23
+ virtual void changeAttributeOrderType
+ (rti1516e::ObjectInstanceHandle theObject,
+ rti1516e::AttributeHandleSet const & theAttributes,
+ rti1516e::OrderType theType)
+ throw (rti1516e::ObjectInstanceNotKnown,
+ rti1516e::AttributeNotDefined,
+ rti1516e::AttributeNotOwned,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ // 8.24
+ virtual void changeInteractionOrderType
+ (rti1516e::InteractionClassHandle theClass,
+ rti1516e::OrderType theType)
+ throw (rti1516e::InteractionClassNotDefined,
+ rti1516e::InteractionClassNotPublished,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ //////////////////////////////////
+ // Data Distribution Management //
+ //////////////////////////////////
+
+ // 9.2
+ virtual rti1516e::RegionHandle createRegion
+ (rti1516e::DimensionHandleSet const & theDimensions)
+ throw (rti1516e::InvalidDimensionHandle,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ // 9.3
+ virtual void commitRegionModifications
+ (rti1516e::RegionHandleSet const & theRegionHandleSet)
+ throw (rti1516e::InvalidRegion,
+ rti1516e::RegionNotCreatedByThisFederate,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ // 9.4
+ virtual void deleteRegion
+ (rti1516e::RegionHandle theRegion)
+ throw (rti1516e::InvalidRegion,
+ rti1516e::RegionNotCreatedByThisFederate,
+ rti1516e::RegionInUseForUpdateOrSubscription,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ // 9.5
+ virtual rti1516e::ObjectInstanceHandle registerObjectInstanceWithRegions
+ (rti1516e::ObjectClassHandle theClass,
+ rti1516e::AttributeHandleSetRegionHandleSetPairVector const &
+ theAttributeHandleSetRegionHandleSetPairVector)
+ throw (rti1516e::ObjectClassNotDefined,
+ rti1516e::ObjectClassNotPublished,
+ rti1516e::AttributeNotDefined,
+ rti1516e::AttributeNotPublished,
+ rti1516e::InvalidRegion,
+ rti1516e::RegionNotCreatedByThisFederate,
+ rti1516e::InvalidRegionContext,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ virtual rti1516e::ObjectInstanceHandle registerObjectInstanceWithRegions
+ (rti1516e::ObjectClassHandle theClass,
+ rti1516e::AttributeHandleSetRegionHandleSetPairVector const &
+ theAttributeHandleSetRegionHandleSetPairVector,
+ std::wstring const & theObjectInstanceName)
+ throw (rti1516e::ObjectClassNotDefined,
+ rti1516e::ObjectClassNotPublished,
+ rti1516e::AttributeNotDefined,
+ rti1516e::AttributeNotPublished,
+ rti1516e::InvalidRegion,
+ rti1516e::RegionNotCreatedByThisFederate,
+ rti1516e::InvalidRegionContext,
+ rti1516e::ObjectInstanceNameNotReserved,
+ rti1516e::ObjectInstanceNameInUse,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ // 9.6
+ virtual void associateRegionsForUpdates
+ (rti1516e::ObjectInstanceHandle theObject,
+ rti1516e::AttributeHandleSetRegionHandleSetPairVector const &
+ theAttributeHandleSetRegionHandleSetPairVector)
+ throw (rti1516e::ObjectInstanceNotKnown,
+ rti1516e::AttributeNotDefined,
+ rti1516e::InvalidRegion,
+ rti1516e::RegionNotCreatedByThisFederate,
+ rti1516e::InvalidRegionContext,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ // 9.7
+ virtual void unassociateRegionsForUpdates
+ (rti1516e::ObjectInstanceHandle theObject,
+ rti1516e::AttributeHandleSetRegionHandleSetPairVector const &
+ theAttributeHandleSetRegionHandleSetPairVector)
+ throw (rti1516e::ObjectInstanceNotKnown,
+ rti1516e::AttributeNotDefined,
+ rti1516e:: InvalidRegion,
+ rti1516e::RegionNotCreatedByThisFederate,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ // 9.8
+ virtual void subscribeObjectClassAttributesWithRegions
+ (rti1516e::ObjectClassHandle theClass,
+ rti1516e::AttributeHandleSetRegionHandleSetPairVector const &
+ theAttributeHandleSetRegionHandleSetPairVector,
+ bool active = true)
+ throw (rti1516e::ObjectClassNotDefined,
+ rti1516e::AttributeNotDefined,
+ rti1516e::InvalidRegion,
+ rti1516e::RegionNotCreatedByThisFederate,
+ rti1516e::InvalidRegionContext,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ // 9.9
+ virtual void unsubscribeObjectClassAttributesWithRegions
+ (rti1516e::ObjectClassHandle theClass,
+ rti1516e::AttributeHandleSetRegionHandleSetPairVector const &
+ theAttributeHandleSetRegionHandleSetPairVector)
+ throw (rti1516e::ObjectClassNotDefined,
+ rti1516e::AttributeNotDefined,
+ rti1516e::InvalidRegion,
+ rti1516e::RegionNotCreatedByThisFederate,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ // 9.10
+ virtual void subscribeInteractionClassWithRegions
+ (rti1516e::InteractionClassHandle theClass,
+ rti1516e::RegionHandleSet const & theRegionHandleSet,
+ bool active = true)
+ throw (rti1516e::InteractionClassNotDefined,
+ rti1516e::InvalidRegion,
+ rti1516e::RegionNotCreatedByThisFederate,
+ rti1516e::InvalidRegionContext,
+ rti1516e::FederateServiceInvocationsAreBeingReportedViaMOM,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ // 9.11
+ virtual void unsubscribeInteractionClassWithRegions
+ (rti1516e::InteractionClassHandle theClass,
+ rti1516e::RegionHandleSet const & theRegionHandleSet)
+ throw (rti1516e::InteractionClassNotDefined,
+ rti1516e::InvalidRegion,
+ rti1516e::RegionNotCreatedByThisFederate,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ // 9.12
+ virtual void sendInteractionWithRegions
+ (rti1516e::InteractionClassHandle theInteraction,
+ rti1516e::ParameterHandleValueMap const & theParameterValues,
+ rti1516e::RegionHandleSet const & theRegionHandleSet,
+ rti1516e::VariableLengthData const & theUserSuppliedTag)
+ throw (rti1516e::InteractionClassNotDefined,
+ rti1516e::InteractionClassNotPublished,
+ rti1516e::InteractionParameterNotDefined,
+ rti1516e::InvalidRegion,
+ rti1516e::RegionNotCreatedByThisFederate,
+ rti1516e::InvalidRegionContext,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ virtual rti1516e::MessageRetractionHandle sendInteractionWithRegions
+ (rti1516e::InteractionClassHandle theInteraction,
+ rti1516e::ParameterHandleValueMap const & theParameterValues,
+ rti1516e::RegionHandleSet const & theRegionHandleSet,
+ rti1516e::VariableLengthData const & theUserSuppliedTag,
+ rti1516e::LogicalTime const & theTime)
+ throw (rti1516e::InteractionClassNotDefined,
+ rti1516e::InteractionClassNotPublished,
+ rti1516e::InteractionParameterNotDefined,
+ rti1516e::InvalidRegion,
+ rti1516e::RegionNotCreatedByThisFederate,
+ rti1516e::InvalidRegionContext,
+ rti1516e::InvalidLogicalTime,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ // 9.13
+ virtual void requestAttributeValueUpdateWithRegions
+ (rti1516e::ObjectClassHandle theClass,
+ rti1516e::AttributeHandleSetRegionHandleSetPairVector const &
theSet,
+ rti1516e::VariableLengthData const & theUserSuppliedTag)
+ throw (rti1516e::ObjectClassNotDefined,
+ rti1516e::AttributeNotDefined,
+ rti1516e::InvalidRegion,
+ rti1516e::RegionNotCreatedByThisFederate,
+ rti1516e::InvalidRegionContext,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ //////////////////////////
+ // RTI Support Services //
+ //////////////////////////
+
+ // 10.2
+ virtual rti1516e::ObjectClassHandle getObjectClassHandle
+ (std::wstring const & theName)
+ throw (rti1516e::NameNotFound,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::RTIinternalError);
+
+ // 10.3
+ virtual std::wstring getObjectClassName
+ (rti1516e::ObjectClassHandle theHandle)
+ throw (rti1516e::InvalidObjectClassHandle,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::RTIinternalError);
+
+ // 10.4
+ virtual rti1516e::AttributeHandle getAttributeHandle
+ (rti1516e::ObjectClassHandle whichClass,
+ std::wstring const & theAttributeName)
+ throw (rti1516e::InvalidObjectClassHandle,
+ rti1516e::NameNotFound,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::RTIinternalError);
+
+ // 10.5
+ virtual std::wstring getAttributeName
+ (rti1516e::ObjectClassHandle whichClass,
+ rti1516e::AttributeHandle theHandle)
+ throw (rti1516e::InvalidObjectClassHandle,
+ rti1516e::InvalidAttributeHandle,
+ rti1516e::AttributeNotDefined,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::RTIinternalError);
+
+ // 10.6
+ virtual rti1516e::InteractionClassHandle getInteractionClassHandle
+ (std::wstring const & theName)
+ throw (rti1516e::NameNotFound,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::RTIinternalError);
+
+ // 10.7
+ virtual std::wstring getInteractionClassName
+ (rti1516e::InteractionClassHandle theHandle)
+ throw (rti1516e::InvalidInteractionClassHandle,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::RTIinternalError);
+
+ // 10.8
+ virtual rti1516e::ParameterHandle getParameterHandle
+ (rti1516e::InteractionClassHandle whichClass,
+ std::wstring const & theName)
+ throw (rti1516e::InvalidInteractionClassHandle,
+ rti1516e::NameNotFound,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::RTIinternalError);
+
+ // 10.9
+ virtual std::wstring getParameterName
+ (rti1516e::InteractionClassHandle whichClass,
+ rti1516e::ParameterHandle theHandle)
+ throw (rti1516e::InvalidInteractionClassHandle,
+ rti1516e::InvalidParameterHandle,
+ rti1516e::InteractionParameterNotDefined,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::RTIinternalError);
+
+ // 10.10
+ virtual rti1516e::ObjectInstanceHandle getObjectInstanceHandle
+ (std::wstring const & theName)
+ throw (rti1516e::ObjectInstanceNotKnown,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::RTIinternalError);
+
+ // 10.11
+ virtual std::wstring getObjectInstanceName
+ (rti1516e::ObjectInstanceHandle theHandle)
+ throw (rti1516e::ObjectInstanceNotKnown,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::RTIinternalError);
+
+ // 10.12
+ virtual rti1516e::DimensionHandle getDimensionHandle
+ (std::wstring const & theName)
+ throw (rti1516e::NameNotFound,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::RTIinternalError);
+
+ // 10.13
+ virtual std::wstring getDimensionName
+ (rti1516e::DimensionHandle theHandle)
+ throw (rti1516e::InvalidDimensionHandle,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::RTIinternalError);
+
+ // 10.14
+ virtual unsigned long getDimensionUpperBound
+ (rti1516e::DimensionHandle theHandle)
+ throw (rti1516e::InvalidDimensionHandle,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::RTIinternalError);
+
+ // 10.15
+ virtual rti1516e::DimensionHandleSet
getAvailableDimensionsForClassAttribute
+ (rti1516e::ObjectClassHandle theClass,
+ rti1516e::AttributeHandle theHandle)
+ throw (rti1516e::InvalidObjectClassHandle,
+ rti1516e::InvalidAttributeHandle,
+ rti1516e::AttributeNotDefined,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::RTIinternalError);
+
+ // 10.16
+ virtual rti1516e::ObjectClassHandle getKnownObjectClassHandle
+ (rti1516e::ObjectInstanceHandle theObject)
+ throw (rti1516e::ObjectInstanceNotKnown,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::RTIinternalError);
+
+ // 10.17
+ virtual rti1516e::DimensionHandleSet
getAvailableDimensionsForInteractionClass
+ (rti1516e::InteractionClassHandle theClass)
+ throw (rti1516e::InvalidInteractionClassHandle,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::RTIinternalError);
+
+ // 10.18
+ virtual rti1516e::TransportationType getTransportationType
+ (std::wstring const & transportationName)
+ throw (rti1516e::InvalidTransportationName,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::RTIinternalError);
+
+ // 10.19
+ virtual std::wstring getTransportationName
+ (rti1516e::TransportationType transportationType)
+ throw (rti1516e::InvalidTransportationType,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::RTIinternalError);
+
+ // 10.20
+ virtual rti1516e::OrderType getOrderType
+ (std::wstring const & orderName)
+ throw (rti1516e::InvalidOrderName,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::RTIinternalError);
+
+ // 10.21
+ virtual std::wstring getOrderName
+ (rti1516e::OrderType orderType)
+ throw (rti1516e::InvalidOrderType,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::RTIinternalError);
+
+ // 10.22
+ virtual void enableObjectClassRelevanceAdvisorySwitch ()
+ throw (rti1516e::ObjectClassRelevanceAdvisorySwitchIsOn,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ // 10.23
+ virtual void disableObjectClassRelevanceAdvisorySwitch ()
+ throw (rti1516e::ObjectClassRelevanceAdvisorySwitchIsOff,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ // 10.24
+ virtual void enableAttributeRelevanceAdvisorySwitch ()
+ throw (rti1516e::AttributeRelevanceAdvisorySwitchIsOn,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ // 10.25
+ virtual void disableAttributeRelevanceAdvisorySwitch ()
+ throw (rti1516e::AttributeRelevanceAdvisorySwitchIsOff,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ // 10.26
+ virtual void enableAttributeScopeAdvisorySwitch ()
+ throw (rti1516e::AttributeScopeAdvisorySwitchIsOn,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ // 10.27
+ virtual void disableAttributeScopeAdvisorySwitch ()
+ throw (rti1516e::AttributeScopeAdvisorySwitchIsOff,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ // 10.28
+ virtual void enableInteractionRelevanceAdvisorySwitch ()
+ throw (rti1516e::InteractionRelevanceAdvisorySwitchIsOn,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ // 10.29
+ virtual void disableInteractionRelevanceAdvisorySwitch ()
+ throw (rti1516e::InteractionRelevanceAdvisorySwitchIsOff,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ // 10.30
+ virtual
+ rti1516e::DimensionHandleSet getDimensionHandleSet
+ (rti1516e::RegionHandle theRegionHandle)
+ throw (rti1516e::InvalidRegion,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ // 10.31
+ virtual
+ rti1516e::RangeBounds getRangeBounds
+ (rti1516e::RegionHandle theRegionHandle,
+ rti1516e::DimensionHandle theDimensionHandle)
+ throw (rti1516e::InvalidRegion,
+ rti1516e::RegionDoesNotContainSpecifiedDimension,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ // 10.32
+ virtual void setRangeBounds
+ (rti1516e::RegionHandle theRegionHandle,
+ rti1516e::DimensionHandle theDimensionHandle,
+ rti1516e::RangeBounds const & theRangeBounds)
+ throw (rti1516e::InvalidRegion,
+ rti1516e::RegionNotCreatedByThisFederate,
+ rti1516e::RegionDoesNotContainSpecifiedDimension,
+ rti1516e::InvalidRangeBound,
+ rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ // 10.33
+ virtual unsigned long normalizeFederateHandle
+ (rti1516e::FederateHandle theFederateHandle)
+ throw (rti1516e::FederateNotExecutionMember,
+ rti1516e::InvalidFederateHandle,
+ rti1516e::RTIinternalError);
+
+ // 10.34
+ virtual unsigned long normalizeServiceGroup
+ (rti1516e::ServiceGroupIndicator theServiceGroup)
+ throw (rti1516e::FederateNotExecutionMember,
+ rti1516e::InvalidServiceGroup,
+ rti1516e::RTIinternalError);
+
+ // 10.37
+ virtual bool evokeCallback(double approximateMinimumTimeInSeconds)
+ throw (rti1516e::FederateNotExecutionMember,
+ rti1516e::RTIinternalError);
+
+ // 10.38
+ virtual bool evokeMultipleCallbacks(double approximateMinimumTimeInSeconds,
+ double approximateMaximumTimeInSeconds)
+ throw (rti1516e::FederateNotExecutionMember,
+ rti1516e::RTIinternalError);
+
+ // 10.39
+ virtual void enableCallbacks ()
+ throw (rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ // 10.40
+ virtual void disableCallbacks ()
+ throw (rti1516e::FederateNotExecutionMember,
+ rti1516e::SaveInProgress,
+ rti1516e::RestoreInProgress,
+ rti1516e::RTIinternalError);
+
+ virtual rti1516e::FederateHandle decodeFederateHandle(
+ rti1516e::VariableLengthData const & encodedValue) const;
+
+ virtual rti1516e::ObjectClassHandle decodeObjectClassHandle(
+ rti1516e::VariableLengthData const & encodedValue) const;
+
+ virtual rti1516e::InteractionClassHandle decodeInteractionClassHandle(
+ rti1516e::VariableLengthData const & encodedValue) const;
+
+ virtual rti1516e::ObjectInstanceHandle decodeObjectInstanceHandle(
+ rti1516e::VariableLengthData const & encodedValue) const;
+
+ virtual rti1516e::AttributeHandle decodeAttributeHandle(
+ rti1516e::VariableLengthData const & encodedValue) const;
+
+ virtual rti1516e::ParameterHandle decodeParameterHandle(
+ rti1516e::VariableLengthData const & encodedValue) const;
+
+ virtual rti1516e::DimensionHandle decodeDimensionHandle(
+ rti1516e::VariableLengthData const & encodedValue) const;
+
+ virtual rti1516e::MessageRetractionHandle decodeMessageRetractionHandle(
+ rti1516e::VariableLengthData const & encodedValue) const;
+
+ virtual rti1516e::RegionHandle decodeRegionHandle(
+ rti1516e::VariableLengthData const & encodedValue) const;
+
+};
+}
+
+#endif // RTI_RTI1516ambassador_h
Index: libRTI/ieee1516-2010/RTIambassadorFactory.cpp
===================================================================
RCS file: libRTI/ieee1516-2010/RTIambassadorFactory.cpp
diff -N libRTI/ieee1516-2010/RTIambassadorFactory.cpp
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ libRTI/ieee1516-2010/RTIambassadorFactory.cpp 6 Mar 2014 16:11:32
-0000 1.1
@@ -0,0 +1,250 @@
+// ----------------------------------------------------------------------------
+// CERTI - HLA RunTime Infrastructure
+// Copyright (C) 2002-2014 ONERA
+//
+// This file is part of CERTI-libRTI
+//
+// CERTI-libRTI is free software ; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public License
+// as published by the Free Software Foundation ; either version 2 of
+// the License, or (at your option) any later version.
+//
+// CERTI-libRTI 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
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this program ; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA
+//
+// ----------------------------------------------------------------------------
+
+#include <RTI/RTIambassadorFactory.h>
+#include <memory>
+#include <iostream>
+#include <cstdlib>
+#include <cerrno>
+#include <cstring>
+#ifndef _WIN32
+#include <csignal>
+#include <unistd.h>
+#endif
+
+#include "PrettyDebug.hh"
+#include "RTIambassadorImplementation.h"
+
+#include "M_Classes.hh"
+
+#include "config.h"
+
+rti1516e::RTIambassadorFactory::RTIambassadorFactory()
+{
+}
+
+rti1516e::RTIambassadorFactory::~RTIambassadorFactory()
+throw ()
+{
+}
+
+namespace {
+static PrettyDebug D1516("LIBRTI1516e", __FILE__);
+static PrettyDebug G1516("GENDOC1516e",__FILE__) ;
+}
+
+std::auto_ptr< rti1516e::RTIambassador >
+rti1516e::RTIambassadorFactory::createRTIambassador(std::vector< std::wstring
> & args)
+throw (BadInitializationParameter,
+ RTIinternalError)
+ {
+ certi::RTI1516ambassador* p_ambassador(new certi::RTI1516ambassador());
+
+ std::auto_ptr< rti1516e::RTIambassador > ap_ambassador(p_ambassador);
+
+ G1516.Out(pdGendoc,"enter RTIambassador::RTIambassador");
+ PrettyDebug::setFederateName( "LibRTI::UnjoinedFederate" );
+ std::wstringstream msg;
+
+ p_ambassador->privateRefs = new RTI1516ambPrivateRefs();
+
+ p_ambassador->privateRefs->socketUn = new SocketUN(stIgnoreSignal);
+
+ p_ambassador->privateRefs->is_reentrant = false ;
+
+ std::vector<std::string> rtiaList;
+ const char* env = getenv("CERTI_RTIA");
+ if (env && strlen(env))
+ rtiaList.push_back(std::string(env));
+ env = getenv("CERTI_HOME");
+ if (env && strlen(env))
+ rtiaList.push_back(std::string(env) + "/bin/rtia");
+ rtiaList.push_back(PACKAGE_INSTALL_PREFIX "/bin/rtia");
+ rtiaList.push_back("rtia");
+
+#if defined(RTIA_USE_TCP)
+ int port = p_ambassador->privateRefs->socketUn->listenUN();
+ if (port == -1) {
+ D1516.Out( pdError, "Cannot listen to RTIA connection. Abort." );
+ throw rti1516e::RTIinternalError(L"Cannot listen to RTIA connection" );
+ }
+#else
+ int pipeFd = p_ambassador->privateRefs->socketUn->socketpair();
+ if (pipeFd == -1) {
+ D1516.Out( pdError, "Cannot get socketpair to RTIA connection. Abort."
);
+ throw rti1516e::RTIinternalError( L"Cannot get socketpair to RTIA
connection" );
+ }
+#endif
+
+#ifdef _WIN32
+ STARTUPINFO si;
+ PROCESS_INFORMATION pi;
+
+ ZeroMemory( &si, sizeof(si) );
+ si.cb = sizeof(si);
+ ZeroMemory( &pi, sizeof(pi) );
+
+#ifndef RTIA_CONSOLE_SHOW
+ /*
+ * Avoid displaying console window
+ * when running RTIA.
+ */
+ si.dwFlags = STARTF_USESHOWWINDOW;
+ si.wShowWindow = SW_HIDE;
+#endif
+
+#if !defined(RTIA_USE_TCP)
+ SOCKET newPipeFd;
+ if (!DuplicateHandle(GetCurrentProcess(),
+ (HANDLE)pipeFd,
+ GetCurrentProcess(),
+ (HANDLE*)&newPipeFd,
+ 0,
+ TRUE, // Inheritable
+ DUPLICATE_SAME_ACCESS)) {
+ D1516.Out( pdError, "Cannot duplicate socket for RTIA connection.
Abort." );
+ throw rti1516e::RTIinternalError( L"Cannot duplicate socket for RTIA
connection. Abort." );
+ }
+#endif
+
+ bool success = false;
+ for (unsigned i = 0; i < rtiaList.size(); ++i) {
+ std::stringstream stream;
+#if defined(RTIA_USE_TCP)
+ stream << rtiaList[i] << ".exe -p " << port;
+#else
+ stream << rtiaList[i] << ".exe -f " << newPipeFd;
+#endif
+
+ // Start the child process.
+ if (CreateProcess( NULL, // No module name (use command line).
+ (char*)stream.str().c_str(), // Command line.
+ NULL, // Process handle not
inheritable.
+ NULL, // Thread handle not
inheritable.
+ TRUE, // Set handle
inheritance to TRUE.
+ 0, // No creation flags.
+ NULL, // Use parent's
environment block.
+ NULL, // Use parent's
starting directory.
+ &si, // Pointer to
STARTUPINFO structure.
+ &pi )) // Pointer to
PROCESS_INFORMATION structure.
+ {
+ success = true;
+ break;
+ }
+ }
+ if (!success) {
+ msg << "CreateProcess - GetLastError()=<"
+ << GetLastError() <<"> "
+ << "Cannot connect to RTIA.exe";
+ throw rti1516e::RTIinternalError(msg.str());
+ }
+
+ p_ambassador->privateRefs->handle_RTIA = pi.hProcess;
+
+#if !defined(RTIA_USE_TCP)
+ closesocket(pipeFd);
+ closesocket(newPipeFd);
+#endif
+
+#else
+
+ sigset_t nset, oset;
+ // temporarily block termination signals
+ // note: this is to prevent child processes from receiving termination
signals
+ sigemptyset(&nset);
+ sigaddset(&nset, SIGINT);
+ sigprocmask(SIG_BLOCK, &nset, &oset);
+
+ switch((p_ambassador->privateRefs->pid_RTIA = fork())) {
+ case -1: // fork failed.
+ perror("fork");
+ // unbock the above blocked signals
+ sigprocmask(SIG_SETMASK, &oset, NULL);
+#if !defined(RTIA_USE_TCP)
+ close(pipeFd);
+#endif
+ throw rti1516e::RTIinternalError(wstringize() << "fork failed in
RTIambassador constructor");
+ break ;
+
+ case 0: // child process (RTIA).
+ // close all open filedescriptors except the pipe one
+ for (int fdmax = sysconf(_SC_OPEN_MAX), fd = 3; fd < fdmax; ++fd) {
+#if !defined(RTIA_USE_TCP)
+ if (fd == pipeFd)
+ continue;
+#endif
+ close(fd);
+ }
+ for (unsigned i = 0; i < rtiaList.size(); ++i)
+ {
+ std::stringstream stream;
+#if defined(RTIA_USE_TCP)
+ stream << port;
+ execlp(rtiaList[i].c_str(), rtiaList[i].c_str(), "-p",
stream.str().c_str(), NULL);
+#else
+ stream << pipeFd;
+ execlp(rtiaList[i].c_str(), rtiaList[i].c_str(), "-f",
stream.str().c_str(), NULL);
+#endif
+ }
+ // unbock the above blocked signals
+ sigprocmask(SIG_SETMASK, &oset, NULL);
+ msg << "Could not launch RTIA process (execlp): "
+ << strerror(errno)
+ << std::endl
+ << "Maybe RTIA is not in search PATH environment.";
+ throw rti1516e::RTIinternalError(msg.str().c_str());
+
+ default: // father process (Federe).
+ // unbock the above blocked signals
+ sigprocmask(SIG_SETMASK, &oset, NULL);
+#if !defined(RTIA_USE_TCP)
+ close(pipeFd);
+#endif
+ break ;
+ }
+#endif
+
+#if defined(RTIA_USE_TCP)
+ if (p_ambassador->privateRefs->socketUn->acceptUN(10*1000) == -1) {
+#ifdef _WIN32
+ TerminateProcess(p_ambassador->privateRefs->handle_RTIA, 0);
+#else
+ kill(p_ambassador->privateRefs->pid_RTIA, SIGINT );
+#endif
+ throw rti1516e::RTIinternalError( wstringize() << "Cannot connect to
RTIA" );
+ }
+#endif
+
+ certi::M_Open_Connexion req, rep ;
+ req.setVersionMajor(CERTI_Message::versionMajor);
+ req.setVersionMinor(CERTI_Message::versionMinor);
+
+ G1516.Out(pdGendoc," ====>executeService OPEN_CONNEXION");
+ p_ambassador->privateRefs->executeService(&req, &rep);
+
+ G1516.Out(pdGendoc,"exit RTIambassador::RTIambassador");
+
+ return ap_ambassador;
+ }
+
+//} // end namespace rti1516
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [certi-cvs] certi libRTI/ieee1516-2000/RTIambassadorFactory...,
CERTI CVS commits <=