[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[certi-cvs] certi libRTI/RTI1516ambassadorFactory.cpp libRT...
From: |
certi-cvs |
Subject: |
[certi-cvs] certi libRTI/RTI1516ambassadorFactory.cpp libRT... |
Date: |
Mon, 31 May 2010 09:33:27 +0000 |
CVSROOT: /sources/certi
Module name: certi
Changes by: Eric NOULARD <erk> 10/05/31 09:33:26
Modified files:
libRTI : RTI1516ambassadorFactory.cpp
RTI1516HandleImplementation.h
RTI1516fedTime.cpp RTI1516ambassador.h
RTI1516ambassador.cpp RTI1516Handle.cpp
RTI1516ambPrivateRefs.cpp RTI1516fedTime.h
RTI1516HandleImplementation.cpp
RTIG : FederationsList.cc Federation.cc
FederationsList.hh RTIG_processing.cc RTIG.hh
Federation.hh
RTIA : Statistics.cc ObjectManagement.cc
DataDistribution.hh RTIA_federate.cc
DataDistribution.cc TimeManagement.cc
ObjectManagement.hh
libCERTI : RootObject.hh Exception.cc CMakeLists.txt
Exception.hh ObjectSet.cc ObjectSet.hh
RootObject.cc
include/RTI : SpecificConfig.h
Added files:
libCERTI : NameReservation.hh NameReservation.cc
Log message:
Merge-in (with modification) the IEEE1516 work of May 27th
from Jeroen.
This check-in does not include the STATIC lib trick.
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/certi/libRTI/RTI1516ambassadorFactory.cpp?cvsroot=certi&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/certi/libRTI/RTI1516HandleImplementation.h?cvsroot=certi&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/certi/libRTI/RTI1516fedTime.cpp?cvsroot=certi&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/certi/libRTI/RTI1516ambassador.h?cvsroot=certi&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/certi/libRTI/RTI1516ambassador.cpp?cvsroot=certi&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/certi/libRTI/RTI1516Handle.cpp?cvsroot=certi&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/certi/libRTI/RTI1516ambPrivateRefs.cpp?cvsroot=certi&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/certi/libRTI/RTI1516fedTime.h?cvsroot=certi&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/certi/libRTI/RTI1516HandleImplementation.cpp?cvsroot=certi&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/certi/RTIG/FederationsList.cc?cvsroot=certi&r1=3.70&r2=3.71
http://cvs.savannah.gnu.org/viewcvs/certi/RTIG/Federation.cc?cvsroot=certi&r1=3.128&r2=3.129
http://cvs.savannah.gnu.org/viewcvs/certi/RTIG/FederationsList.hh?cvsroot=certi&r1=3.54&r2=3.55
http://cvs.savannah.gnu.org/viewcvs/certi/RTIG/RTIG_processing.cc?cvsroot=certi&r1=3.102&r2=3.103
http://cvs.savannah.gnu.org/viewcvs/certi/RTIG/RTIG.hh?cvsroot=certi&r1=3.33&r2=3.34
http://cvs.savannah.gnu.org/viewcvs/certi/RTIG/Federation.hh?cvsroot=certi&r1=3.65&r2=3.66
http://cvs.savannah.gnu.org/viewcvs/certi/RTIA/Statistics.cc?cvsroot=certi&r1=3.22&r2=3.23
http://cvs.savannah.gnu.org/viewcvs/certi/RTIA/ObjectManagement.cc?cvsroot=certi&r1=3.69&r2=3.70
http://cvs.savannah.gnu.org/viewcvs/certi/RTIA/DataDistribution.hh?cvsroot=certi&r1=3.20&r2=3.21
http://cvs.savannah.gnu.org/viewcvs/certi/RTIA/RTIA_federate.cc?cvsroot=certi&r1=3.108&r2=3.109
http://cvs.savannah.gnu.org/viewcvs/certi/RTIA/DataDistribution.cc?cvsroot=certi&r1=3.35&r2=3.36
http://cvs.savannah.gnu.org/viewcvs/certi/RTIA/TimeManagement.cc?cvsroot=certi&r1=3.58&r2=3.59
http://cvs.savannah.gnu.org/viewcvs/certi/RTIA/ObjectManagement.hh?cvsroot=certi&r1=3.34&r2=3.35
http://cvs.savannah.gnu.org/viewcvs/certi/libCERTI/RootObject.hh?cvsroot=certi&r1=3.35&r2=3.36
http://cvs.savannah.gnu.org/viewcvs/certi/libCERTI/Exception.cc?cvsroot=certi&r1=3.20&r2=3.21
http://cvs.savannah.gnu.org/viewcvs/certi/libCERTI/CMakeLists.txt?cvsroot=certi&r1=1.35&r2=1.36
http://cvs.savannah.gnu.org/viewcvs/certi/libCERTI/Exception.hh?cvsroot=certi&r1=3.10&r2=3.11
http://cvs.savannah.gnu.org/viewcvs/certi/libCERTI/ObjectSet.cc?cvsroot=certi&r1=3.32&r2=3.33
http://cvs.savannah.gnu.org/viewcvs/certi/libCERTI/ObjectSet.hh?cvsroot=certi&r1=3.17&r2=3.18
http://cvs.savannah.gnu.org/viewcvs/certi/libCERTI/RootObject.cc?cvsroot=certi&r1=3.50&r2=3.51
http://cvs.savannah.gnu.org/viewcvs/certi/libCERTI/NameReservation.hh?cvsroot=certi&rev=3.1
http://cvs.savannah.gnu.org/viewcvs/certi/libCERTI/NameReservation.cc?cvsroot=certi&rev=3.1
http://cvs.savannah.gnu.org/viewcvs/certi/include/RTI/SpecificConfig.h?cvsroot=certi&r1=1.2&r2=1.3
Patches:
Index: libRTI/RTI1516ambassadorFactory.cpp
===================================================================
RCS file: /sources/certi/certi/libRTI/RTI1516ambassadorFactory.cpp,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- libRTI/RTI1516ambassadorFactory.cpp 28 Apr 2010 18:48:30 -0000 1.1
+++ libRTI/RTI1516ambassadorFactory.cpp 31 May 2010 09:33:25 -0000 1.2
@@ -6,7 +6,7 @@
#include <cstdlib>
#include <cerrno>
#include <cstring>
-#if not defined(_WIN32)
+#ifndef _WIN32
#include <csignal>
#endif
Index: libRTI/RTI1516HandleImplementation.h
===================================================================
RCS file: /sources/certi/certi/libRTI/RTI1516HandleImplementation.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- libRTI/RTI1516HandleImplementation.h 28 Apr 2010 18:48:30 -0000
1.1
+++ libRTI/RTI1516HandleImplementation.h 31 May 2010 09:33:25 -0000
1.2
@@ -37,9 +37,6 @@
virtual ~HandleImplementation()
throw();
- virtual HandleImplementation &
- operator=(HandleImplementation const & rhs);
-
/* Indicates whether this handle is valid */
virtual bool isValid() const;
Index: libRTI/RTI1516fedTime.cpp
===================================================================
RCS file: /sources/certi/certi/libRTI/RTI1516fedTime.cpp,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- libRTI/RTI1516fedTime.cpp 28 Apr 2010 18:48:30 -0000 1.1
+++ libRTI/RTI1516fedTime.cpp 31 May 2010 09:33:25 -0000 1.2
@@ -11,6 +11,21 @@
#include "certi.hh"
+rti1516::LogicalTime &
+rti1516::LogicalTime::operator=(rti1516::LogicalTime const & value)
+throw (rti1516::InvalidLogicalTime)
+{
+ throw rti1516::InvalidLogicalTime(L"Operator should be overloaded");
+}
+
+rti1516::LogicalTimeInterval &
+rti1516::LogicalTimeInterval::operator=(rti1516::LogicalTimeInterval const &
value)
+throw (rti1516::InvalidLogicalTimeInterval)
+{
+ throw rti1516::InvalidLogicalTimeInterval(L"Operator should be
overloaded");
+}
+
+
/////////////////////////////////////////////////////////////
//------------------- RTI1516fedTime ----------------------//
/////////////////////////////////////////////////////////////
@@ -82,7 +97,8 @@
if (other == 0)
{
#if defined(_WIN32) && defined(_MSC_VER)
- throw std::wstring(L"Different LogicalTime
implementation");
+ //throw std::wstring(L"Different LogicalTime
implementation");'
+ throw rti1516::InvalidLogicalTime(L"Different
LogicalTime implementation");
#else
//throw rti1516::InvalidLogicalTime(L"Different
LogicalTime implementation");
#endif
Index: libRTI/RTI1516ambassador.h
===================================================================
RCS file: /sources/certi/certi/libRTI/RTI1516ambassador.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- libRTI/RTI1516ambassador.h 28 Apr 2010 18:48:30 -0000 1.1
+++ libRTI/RTI1516ambassador.h 31 May 2010 09:33:25 -0000 1.2
@@ -20,6 +20,17 @@
private:
RTI1516ambPrivateRefs* privateRefs ;
+ // Helper functions
+ template<typename T> void
+ assignAHSAndExecuteService(const
rti1516::AttributeHandleSet &AHS, T &req, T &rep);
+ template<typename T> void
+ assignPHVMAndExecuteService(const
rti1516::ParameterHandleValueMap &PHVM, T &req, T &rep);
+ template<typename T> void
+ assignAHVMAndExecuteService(const
rti1516::AttributeHandleValueMap &AHVM, T &req, T &rep);
+ // Helper function for CallBacks
+ bool __tick_kernel(bool, TickTime, TickTime)
+ throw (SpecifiedSaveLabelDoesNotExist,
RTIinternalError);
+
protected:
RTI1516ambassador()
throw ();
Index: libRTI/RTI1516ambassador.cpp
===================================================================
RCS file: /sources/certi/certi/libRTI/RTI1516ambassador.cpp,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- libRTI/RTI1516ambassador.cpp 28 Apr 2010 18:48:30 -0000 1.1
+++ libRTI/RTI1516ambassador.cpp 31 May 2010 09:33:25 -0000 1.2
@@ -1,7 +1,7 @@
#include "RTI1516ambassador.h"
#include <RTI/RangeBounds.h>
-#if not defined(_WIN32)
+#ifndef _WIN32
#include <cstdlib>
#include <cstring>
#endif
@@ -13,6 +13,7 @@
#include "RTI1516HandleFactory.h"
#include "RTI1516fedTime.h"
+#include <algorithm>
namespace {
@@ -23,48 +24,109 @@
namespace rti1516
{
+ /* Deletor Object */
+ template <class T>
+ struct Deletor {
+ void operator() (T* e) {delete e;};
+ };
+
/* Helper functions */
template<typename T>
void
- assignPHVMToRequest(const rti1516::ParameterHandleValueMap &PHVM, T
request) {
+ RTI1516ambassador::assignPHVMAndExecuteService(const
rti1516::ParameterHandleValueMap &PHVM, T &req, T &rep) {
- uint32_t size = PHVM.size();
- request.setParametersSize(size);
- request.setValuesSize(size);
-
- rti1516::ParameterHandleValueMap::const_iterator iter;
- int index = 0;
- for (iter=PHVM.begin(); iter != PHVM.end(); ++iter) {
- certi::ParameterHandle* certiHandle =
(certi::ParameterHandle*) iter->first.encode().data();
- request.setParameters(*certiHandle, index);
-
- char* paramValue;
- // TODO Fix memory leak!
- paramValue = (char*)malloc(iter->second.size());
- memcpy(paramValue, iter->second.data(),
iter->second.size());
- request.setValues(std::string(paramValue), index);
- index++;
+ req.setParametersSize(PHVM.size());
+ req.setValuesSize(PHVM.size());
+ std::vector<certi::ParameterValue_t*> parameterValueVector;
+ parameterValueVector.resize(PHVM.size());
+ uint32_t i = 0;
+ for ( rti1516::ParameterHandleValueMap::const_iterator it =
PHVM.begin(); it != PHVM.end(); it++, ++i)
+ {
+
req.setParameters(ParameterHandleFriend::toCertiHandle(it->first),i);
+ char *buf = (char*) calloc(it->second.size() + 1,
sizeof(char));
+ memcpy(buf, it->second.data(), it->second.size());
+ certi::ParameterValue_t* paramValue = new
certi::ParameterValue_t(buf);
+ free(buf);
+ parameterValueVector[i] = paramValue;
+ req.setValues(*paramValue, i);
+ }
+
+ try {
+ privateRefs->executeService(&req, &rep);
+ } catch (...) {
+ struct Deletor<certi::ParameterValue_t>
paramValueDeletor;
+ //delete parameter values
+
std::for_each(parameterValueVector.begin(),parameterValueVector.end(),paramValueDeletor);
+ throw;
}
}
template<typename T>
void
- assignAHSToRequest(const rti1516::AttributeHandleSet &AHS, T request) {
- request.setAttributesSize(AHS.size());
+ RTI1516ambassador::assignAHVMAndExecuteService(const
rti1516::AttributeHandleValueMap &AHVM, T &req, T &rep) {
+
+ req.setAttributesSize(AHVM.size());
+ req.setValuesSize(AHVM.size());
+ struct Deletor<certi::AttributeValue_t> attrValueDeletor;
+ std::vector<certi::AttributeValue_t*> attributeValueVector;
+ attributeValueVector.resize(AHVM.size());
+ uint32_t i = 0;
+ for ( rti1516::AttributeHandleValueMap::const_iterator it =
AHVM.begin(); it != AHVM.end(); it++, ++i)
+ {
+
req.setAttributes(AttributeHandleFriend::toCertiHandle(it->first),i);
+ char *buf = (char*) calloc(it->second.size() + 1,
sizeof(char));
+ memcpy(buf, it->second.data(), it->second.size());
+ certi::AttributeValue_t* attrValue = new
certi::AttributeValue_t(buf);
+ free(buf);
+ attributeValueVector[i] = attrValue;
+ req.setValues(*attrValue, i);
+ }
+
+ try {
+ privateRefs->executeService(&req, &rep);
+ } catch (...) {
+ //delete attribute values
+
std::for_each(attributeValueVector.begin(),attributeValueVector.end(),attrValueDeletor);
+ throw;
+ }
+
+ //delete attribute values
+
std::for_each(attributeValueVector.begin(),attributeValueVector.end(),attrValueDeletor);
+ }
+
+ template<typename T>
+ void
+ RTI1516ambassador::assignAHSAndExecuteService(const
rti1516::AttributeHandleSet &AHS, T &req, T &rep) {
+ req.setAttributesSize(AHS.size());
+ struct Deletor<certi::AttributeHandle> attrHandleDeletor;
+ std::vector<certi::AttributeHandle*> attributeHandleVector;
+ attributeHandleVector.resize(AHS.size());
uint32_t i = 0;
for ( rti1516::AttributeHandleSet::const_iterator it =
AHS.begin(); it != AHS.end(); it++, ++i)
{
-
request.setAttributes(AttributeHandleFriend::toCertiHandle(*it),i);
+ certi::AttributeHandle certiHandle =
AttributeHandleFriend::toCertiHandle(*it);
+ req.setAttributes(certiHandle,i);
+ attributeHandleVector[i] = &certiHandle;
}
+
+ try {
+ privateRefs->executeService(&req, &rep);
+ } catch (...) {
+ //delete attribute handles
+
std::for_each(attributeHandleVector.begin(),attributeHandleVector.end(),attrHandleDeletor);
+ throw;
+ }
+
+ //delete attribute handles
+
std::for_each(attributeHandleVector.begin(),attributeHandleVector.end(),attrHandleDeletor);
}
std::string varLengthDataAsString(VariableLengthData varLengthData) {
- char* str;
- // TODO Fix memory leak!
- // TODO Fix loss of data after '\0' character
- str = (char*)malloc(varLengthData.size());
- memcpy(str, varLengthData.data(), varLengthData.size());
- return std::string(str);
+ char *buf = (char*) calloc(varLengthData.size() + 1,
sizeof(char));
+ memcpy(buf, varLengthData.data(), varLengthData.size());
+ std::string retVal(buf);
+ free(buf);
+ return retVal;
}
certi::TransportType
toCertiTransportationType(rti1516::TransportationType theType) {
@@ -79,8 +141,6 @@
rti1516::OrderType toRTI1516OrderType(certi::OrderType theType) {
return (theType == certi::RECEIVE) ? rti1516::RECEIVE :
rti1516::TIMESTAMP;
}
-
-
/* end of Helper functions */
RTIambassador::RTIambassador() throw()
@@ -108,6 +168,82 @@
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 (rti1516::SpecifiedSaveLabelDoesNotExist,
+ rti1516::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 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 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 RTIinternalError(message);
+ }
+ } // while(1)
+ }
+
// 4.2
void RTI1516ambassador::createFederationExecution
(std::wstring const & federationExecutionName,
@@ -683,7 +819,6 @@
RestoreInProgress,
RTIinternalError)
{
- /* TODO */
M_Reserve_Object_Instance_Name req, rep;
std::string objInstanceName(theObjectInstanceName.begin(),
theObjectInstanceName.end());
@@ -754,18 +889,8 @@
req.setTag(varLengthDataAsString(theUserSuppliedTag));
- req.setAttributesSize(theAttributeValues.size());
- req.setValuesSize(theAttributeValues.size());
- uint32_t i = 0;
- for ( rti1516::AttributeHandleValueMap::const_iterator it =
theAttributeValues.begin(); it != theAttributeValues.end(); it++, ++i)
- {
-
req.setAttributes(AttributeHandleFriend::toCertiHandle(it->first),i);
- certi::AttributeValue_t attrValue;
- memcpy(&attrValue, it->second.data(),
it->second.size());
- req.setValues(attrValue, i);
- }
+ assignAHVMAndExecuteService(theAttributeValues, req, rep);
- privateRefs->executeService(&req, &rep);
G.Out(pdGendoc,"exit RTI1516ambassador::updateAttributeValues
without time");
}
@@ -798,18 +923,8 @@
req.setTag(varLengthDataAsString(theUserSuppliedTag));
- req.setAttributesSize(theAttributeValues.size());
- req.setValuesSize(theAttributeValues.size());
- uint32_t i = 0;
- for ( rti1516::AttributeHandleValueMap::const_iterator it =
theAttributeValues.begin(); it != theAttributeValues.end(); it++, ++i)
- {
-
req.setAttributes(AttributeHandleFriend::toCertiHandle(it->first),i);
- certi::AttributeValue_t attrValue;
- memcpy(&attrValue, it->second.data(),
it->second.size());
- req.setValues(attrValue, i);
- }
+ assignAHVMAndExecuteService(theAttributeValues, req, rep);
- privateRefs->executeService(&req, &rep);
G.Out(pdGendoc,"return
RTI1516ambassador::updateAttributeValues with time");
certi::FederateHandle certiHandle =
rep.getEventRetraction().getSendingFederate();
uint64_t serialNum = rep.getEventRetraction().getSN();
@@ -840,11 +955,9 @@
}
req.setTag(varLengthDataAsString(theUserSuppliedTag));
-
- assignPHVMToRequest(theParameterValues,req);
-
req.setRegion(0);
- privateRefs->executeService(&req, &rep);
+
+ assignPHVMAndExecuteService(theParameterValues, req, rep);
}
MessageRetractionHandle RTI1516ambassador::sendInteraction
@@ -874,12 +987,9 @@
}
req.setTag(varLengthDataAsString(theUserSuppliedTag));
-
- assignPHVMToRequest(theParameterValues,req);
-
req.setRegion(0);
- privateRefs->executeService(&req, &rep);
+ assignPHVMAndExecuteService(theParameterValues, req, rep);
certi::FederateHandle certiHandle =
rep.getEventRetraction().getSendingFederate();
uint64_t serialNr = rep.getEventRetraction().getSN();
@@ -1052,9 +1162,8 @@
G.Out(pdGendoc,"enter
RTI1516ambassador::requestClassAttributeValueUpdate");
req.setObjectClass(rti1516::ObjectClassHandleFriend::toCertiHandle(theClass));
- assignAHSToRequest(theAttributes, req);
+ assignAHSAndExecuteService(theAttributes, req, rep);
- privateRefs->executeService(&req, &rep);
G.Out(pdGendoc,"exit
RTI1516ambassador::requestClassAttributeValueUpdate");
}
@@ -1215,9 +1324,8 @@
M_Attribute_Ownership_Release_Response req, rep ;
req.setObject(rti1516::ObjectInstanceHandleFriend::toCertiHandle(theObject));
- assignAHSToRequest(theAttributes, req);
- privateRefs->executeService(&req, &rep);
+ assignAHSAndExecuteService(theAttributes, req, rep);
if (rep.getExceptionType() == e_NO_EXCEPTION) {
theDivestedAttributes.clear();
@@ -1343,6 +1451,7 @@
//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
double * lookAheadTime = (double*) theLookahead.encode().data();
req.setLookahead(*lookAheadTime);
@@ -1484,6 +1593,7 @@
RestoreInProgress,
RTIinternalError)
{
+ // JvY: Implementation copied from previous CERTI
implementation, including immediate throw.
throw RTIinternalError(L"Unimplemented Service
flushQueueRequest");
M_Flush_Queue_Request req, rep ;
@@ -1533,11 +1643,16 @@
privateRefs->executeService(&req, &rep);
+ //TODO JRE: goed testen of deze return value wel klopt!
+ certi::FederationTime fedTime = rep.getDate();
+ if (fedTime == NULL || fedTime.getTime() == 0) {
+ return false;
+ }
+
+ // JvY: TODO Controleren of dit blijft werken met andere
tijdsimplementaties
certi_cast<RTI1516fedTime>()(theTime) = rep.getDate().getTime();
- //TODO JRE: return value???
- throw RTIinternalError(L"Unimplemented Service queryGALT");
- return false;
+ return true;
}
// 8.17
@@ -1551,6 +1666,7 @@
privateRefs->executeService(&req, &rep);
+ // JvY: TODO Controleren of dit blijft werken met andere
tijdsimplementaties
certi_cast<RTI1516fedTime>()(theTime) = rep.getDate().getTime();
}
@@ -1566,11 +1682,15 @@
privateRefs->executeService(&req, &rep);
+ //TODO JRE: goed testen of deze return value wel klopt!
+ certi::FederationTime fedTime = rep.getDate();
+ if (fedTime == NULL || fedTime.getTime() == 0) {
+ return false;
+ }
+ // JvY: TODO Controleren of dit blijft werken met andere
tijdsimplementaties
certi_cast<RTI1516fedTime>()(theTime) = rep.getDate().getTime();
- //TODO JRE: return value???
- throw RTIinternalError(L"Unimplemented Service queryLITS");
- return false;
+ return true;
}
// 8.19
@@ -1637,9 +1757,8 @@
req.setObject(rti1516::ObjectInstanceHandleFriend::toCertiHandle(theObject));
req.setOrder(rti1516::toCertiOrderType(theType));
- assignAHSToRequest(theAttributes, req);
- privateRefs->executeService(&req, &rep);
+ assignAHSAndExecuteService(theAttributes, req, rep);
}
// 8.24
@@ -1967,9 +2086,7 @@
}
std::string nameString = rep.getClassName();
- std::wstring nameWString(nameString.length(), L' '); // Make
room for characters
- // Copy string to wstring.
- std::copy(nameString.begin(), nameString.end(),
nameWString.begin());
+ std::wstring nameWString(nameString.begin(), nameString.end());
//return hla_strdup(rep.getClassName());
return nameWString;
@@ -2047,8 +2164,7 @@
//return hla_strdup(rep.getAttributeName());
std::string nameString = rep.getAttributeName();
- std::wstring nameWString(nameString.length(), L' '); // Make
room for characters
- std::copy(nameString.begin(), nameString.end(),
nameWString.begin());
+ std::wstring nameWString(nameString.begin(), nameString.end());
return nameWString;
}
@@ -2093,8 +2209,7 @@
//return hla_strdup(rep.getClassName());
std::string nameString = rep.getClassName();
- std::wstring nameWString(nameString.length(), L' '); // Make
room for characters
- std::copy(nameString.begin(), nameString.end(),
nameWString.begin());
+ std::wstring nameWString(nameString.begin(), nameString.end());
return nameWString;
}
@@ -2159,8 +2274,7 @@
//return hla_strdup(rep.getParameterName());
std::string nameString = rep.getParameterName();
- std::wstring nameWString(nameString.length(), L' '); // Make
room for characters
- std::copy(nameString.begin(), nameString.end(),
nameWString.begin());
+ std::wstring nameWString(nameString.begin(), nameString.end());
return nameWString;
}
@@ -2193,8 +2307,7 @@
//return hla_strdup(rep.getObjectInstanceName());
std::string nameString = rep.getObjectInstanceName();
- std::wstring nameWString(nameString.length(), L' '); // Make
room for characters
- std::copy(nameString.begin(), nameString.end(),
nameWString.begin());
+ std::wstring nameWString(nameString.begin(), nameString.end());
return nameWString;
}
@@ -2229,8 +2342,7 @@
privateRefs->executeService(&req, &rep);
//return hla_strdup(rep.getDimensionName());
std::string nameString = rep.getDimensionName();
- std::wstring nameWString(nameString.length(), L' '); // Make
room for characters
- std::copy(nameString.begin(), nameString.end(),
nameWString.begin());
+ std::wstring nameWString(nameString.begin(), nameString.end());
return nameWString;
}
@@ -2329,8 +2441,7 @@
//return hla_strdup(rep.getTransportationName());
std::string nameString = rep.getTransportationName();
- std::wstring nameWString(nameString.length(), L' '); // Make
room for characters
- std::copy(nameString.begin(), nameString.end(),
nameWString.begin());
+ std::wstring nameWString(nameString.begin(), nameString.end());
return nameWString;
}
@@ -2365,8 +2476,7 @@
//return hla_strdup(rep.getOrderingName());
std::string nameString = rep.getOrderingName();
- std::wstring nameWString(nameString.length(), L' '); // Make
room for characters
- std::copy(nameString.begin(), nameString.end(),
nameWString.begin());
+ std::wstring nameWString(nameString.begin(), nameString.end());
return nameWString;
}
@@ -2688,9 +2798,7 @@
throw (FederateNotExecutionMember,
RTIinternalError)
{
- /* TODO */
- // Copy here from the RTIambassador.cc:tick() (and related
functions)
- throw RTIinternalError(L"Not yet implemented");
+ return __tick_kernel(false, approximateMinimumTimeInSeconds,
approximateMinimumTimeInSeconds);
}
// 10.38
@@ -2699,9 +2807,7 @@
throw (FederateNotExecutionMember,
RTIinternalError)
{
- /* TODO */
- // Copy here from the RTIambassador.cc:tick() (and related
functions)
- throw RTIinternalError(L"Not yet implemented");
+ return __tick_kernel(true, approximateMinimumTimeInSeconds,
approximateMaximumTimeInSeconds);
}
// 10.39
@@ -2712,6 +2818,7 @@
RTIinternalError)
{
/* TODO */
+ throw RTIinternalError(L"Not yet implemented");
}
// 10.40
@@ -2722,6 +2829,7 @@
RTIinternalError)
{
/* TODO */
+ throw RTIinternalError(L"Not yet implemented");
}
FederateHandle RTI1516ambassador::decodeFederateHandle(
Index: libRTI/RTI1516Handle.cpp
===================================================================
RCS file: /sources/certi/certi/libRTI/RTI1516Handle.cpp,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- libRTI/RTI1516Handle.cpp 28 Apr 2010 18:48:30 -0000 1.1
+++ libRTI/RTI1516Handle.cpp 31 May 2010 09:33:25 -0000 1.2
@@ -1,3 +1,4 @@
+#include <sstream>
#include <RTI/Handle.h>
#include "RTI1516HandleImplementation.h"
@@ -105,7 +106,11 @@
\
std::wstring HandleKind::toString() const \
{ \
- return L""; \
+ if (_impl == NULL) return L"";
\
+ std::wstring implStr = _impl->toString();
\
+ std::wstringstream ss;
\
+ ss << #HandleKind << "_" << implStr;
\
+ return ss.str(); \
} \
\
const HandleKind##Implementation* HandleKind::getImplementation() const
\
Index: libRTI/RTI1516ambPrivateRefs.cpp
===================================================================
RCS file: /sources/certi/certi/libRTI/RTI1516ambPrivateRefs.cpp,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- libRTI/RTI1516ambPrivateRefs.cpp 28 Apr 2010 18:48:31 -0000 1.1
+++ libRTI/RTI1516ambPrivateRefs.cpp 31 May 2010 09:33:25 -0000 1.2
@@ -19,7 +19,7 @@
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
// USA
//
-// $Id: RTI1516ambPrivateRefs.cpp,v 1.1 2010/04/28 18:48:31 erk Exp $
+// $Id: RTI1516ambPrivateRefs.cpp,v 1.2 2010/05/31 09:33:25 erk Exp $
// ----------------------------------------------------------------------------
#include <config.h>
@@ -710,6 +710,12 @@
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;
@@ -1172,9 +1178,31 @@
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: RTI1516ambPrivateRefs.cpp,v 1.1 2010/04/28 18:48:31 erk Exp $
+// $Id: RTI1516ambPrivateRefs.cpp,v 1.2 2010/05/31 09:33:25 erk Exp $
Index: libRTI/RTI1516fedTime.h
===================================================================
RCS file: /sources/certi/certi/libRTI/RTI1516fedTime.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- libRTI/RTI1516fedTime.h 28 Apr 2010 18:48:30 -0000 1.1
+++ libRTI/RTI1516fedTime.h 31 May 2010 09:33:25 -0000 1.2
@@ -5,19 +5,6 @@
#include <RTI/certiLogicalTimeInterval.h>
#include <RTI/certiLogicalTimeFactory.h>
-// FIXME Eric-->Jeroen why do we need this here since
-// the export MACRO should be defined in SpecificConfig.h ?
-#if defined(_WIN32)
- #if defined(BUILDING_FEDTIME)
- // define the proper qualifiers to import/export symbols from/to DLL
- #define RTI_EXPORT_FEDTIME __declspec(dllexport)
- #else // !BUILDING_FEDTIME
- #define RTI_EXPORT_FEDTIME __declspec(dllimport)
- #endif // BUILDING_FEDTIME
-#else
- #define RTI_EXPORT_FEDTIME
-#endif // _WIN32
-
namespace rti1516 {
class VariableLengthData;
}
@@ -94,6 +81,7 @@
// Generates an encoded value that can be used to send
// LogicalTimes to other federates in updates or interactions
+ // Not implemented.
virtual
rti1516::VariableLengthData
encode() const;
@@ -109,6 +97,7 @@
throw (rti1516::CouldNotEncode);
// Decode encodedLogicalTime into self
+ // Not implemented.
virtual
void
decode(rti1516::VariableLengthData const & encodedLogicalTime)
@@ -227,6 +216,7 @@
// Generates an encoded value that can be used to send
// LogicalTimeIntervals to other federates in updates or interactions
+ // Not implemented.
virtual
rti1516::VariableLengthData
encode() const;
@@ -242,6 +232,7 @@
throw (rti1516::CouldNotEncode);
// Decode encodedValue into self
+ // Not implemented.
virtual
void
decode(rti1516::VariableLengthData const & encodedValue)
Index: libRTI/RTI1516HandleImplementation.cpp
===================================================================
RCS file: /sources/certi/certi/libRTI/RTI1516HandleImplementation.cpp,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- libRTI/RTI1516HandleImplementation.cpp 28 Apr 2010 18:48:30 -0000
1.1
+++ libRTI/RTI1516HandleImplementation.cpp 31 May 2010 09:33:25 -0000
1.2
@@ -25,7 +25,7 @@
}
memcpy(&val, encodedValue.data(), size);
- for(int 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;
@@ -48,15 +48,6 @@
_value = rhs._value;
}
- HandleImplementation &
HandleImplementation::operator=(HandleImplementation const & rhs)
- {
- if (this != &rhs)
- {
- _value = rhs._value;
- }
- return *this;
- }
-
/* Indicates whether this handle is valid */
bool HandleImplementation::isValid() const
{
@@ -90,7 +81,7 @@
unsigned long val = _value;
char *buf = (char *) buffer;
- for(int i = 0; i < sizeof(_value); i++)
+ for(uint32_t i = 0; i < sizeof(_value); i++)
{
buf[sizeof(_value)-i-1] = (char) val & 0xFF;
val = val >> 8;
@@ -195,7 +186,7 @@
memcpy(&val2, (ULong*)encodedValue.data() + 1 , size);
// _value
- for(int i = 0; i < sizeof(val1); i++)
+ for(uint32_t i = 0; i < sizeof(val1); i++)
{
buf1[size-i-1] = (char) val1 & 0xFF;
val1 = val1 >> 8;
@@ -206,7 +197,7 @@
_value = newValue;
// _serialNum
- for(int i = 0; i < sizeof(val2); i++)
+ for(uint32_t i = 0; i < sizeof(val2); i++)
{
buf2[size-i-1] = (char) val2 & 0xFF;
val2 = val2 >> 8;
@@ -273,12 +264,12 @@
unsigned long val = _value;
unsigned long serialNum = _serialNum;
char *buf = (char *) buffer;
- for(int i = 0; i < sizeof(_value); i++)
+ for(uint32_t i = 0; i < sizeof(_value); i++)
{
buf[sizeof(_value)-i-1] = (char) val & 0xFF;
val = val >> 8;
}
- for(int i = 0; i < sizeof(_serialNum); i++)
+ for(uint32_t i = 0; i < sizeof(_serialNum); i++)
{
buf[sizeof(_value)+sizeof(_serialNum)-i-1] = (char) serialNum &
0xFF;
serialNum = serialNum >> 8;
Index: RTIG/FederationsList.cc
===================================================================
RCS file: /sources/certi/certi/RTIG/FederationsList.cc,v
retrieving revision 3.70
retrieving revision 3.71
diff -u -b -r3.70 -r3.71
--- RTIG/FederationsList.cc 19 Mar 2010 13:54:03 -0000 3.70
+++ RTIG/FederationsList.cc 31 May 2010 09:33:25 -0000 3.71
@@ -18,7 +18,7 @@
// along with this program ; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
-// $Id: FederationsList.cc,v 3.70 2010/03/19 13:54:03 erk Exp $
+// $Id: FederationsList.cc,v 3.71 2010/05/31 09:33:25 erk Exp $
// ----------------------------------------------------------------------------
#include <config.h>
@@ -1393,7 +1393,29 @@
return federation->requestObjectOwner(federate, id, attributes, list_size);
}
+void
+FederationsList::reserveObjectInstanceName(Handle federationHandle,
+
FederateHandle the_federate,
+
std::string newObjName)
+ throw(IllegalName,
+ FederateNotExecutionMember,
+ SaveInProgress,
+ RestoreInProgress,
+ RTIinternalError)
+
+{
+ G.Out(pdGendoc,"enter FederationsList::reserveObjectInstanceName");
+
+ // It may throw FederationExecutionDoesNotExist
+ Federation *federation = searchFederation(federationHandle);
+
+ federation->reserveObjectInstanceName(the_federate, newObjName);
+ G.Out(pdGendoc,"exit FederationsList::federateRestoreStatus");
+}
+
+
+
}} // certi::rtig
-// EOF $Id: FederationsList.cc,v 3.70 2010/03/19 13:54:03 erk Exp $
+// EOF $Id: FederationsList.cc,v 3.71 2010/05/31 09:33:25 erk Exp $
Index: RTIG/Federation.cc
===================================================================
RCS file: /sources/certi/certi/RTIG/Federation.cc,v
retrieving revision 3.128
retrieving revision 3.129
diff -u -b -r3.128 -r3.129
--- RTIG/Federation.cc 28 Apr 2010 18:48:31 -0000 3.128
+++ RTIG/Federation.cc 31 May 2010 09:33:26 -0000 3.129
@@ -18,7 +18,7 @@
// along with this program ; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
-// $Id: Federation.cc,v 3.128 2010/04/28 18:48:31 erk Exp $
+// $Id: Federation.cc,v 3.129 2010/05/31 09:33:26 erk Exp $
// ----------------------------------------------------------------------------
#include <config.h>
@@ -1559,6 +1559,47 @@
G.Out(pdGendoc,"exit Federation::publishObject");
}
+
+void
+Federation::reserveObjectInstanceName(FederateHandle theFederateHandle,
+ std::string newObjName)
+ throw (IllegalName,
+ SaveInProgress,
+ RestoreInProgress,
+ RTIinternalError)
+{
+ Socket * socket ;
+ NetworkMessage *msg;
+
+ bool reservation_ok = false;
+
+ reservation_ok = root->reserveObjectInstanceName(theFederateHandle,
newObjName);
+
+ if (reservation_ok)
+ {
+ msg =
NM_Factory::create(NetworkMessage::RESERVE_OBJECT_INSTANCE_NAME_SUCCEEDED);
+ NM_Reserve_Object_Instance_Name_Succeeded *okMsg =
dynamic_cast<NM_Reserve_Object_Instance_Name_Succeeded *>(msg);
+
+ okMsg->setObjectName(newObjName);
+ G.Out(pdGendoc," =====> send message R_O_I_N_S to
federate %d",msg->getFederate());
+ } else {
+ msg =
NM_Factory::create(NetworkMessage::RESERVE_OBJECT_INSTANCE_NAME_FAILED);
+ NM_Reserve_Object_Instance_Name_Failed *nokMsg =
dynamic_cast<NM_Reserve_Object_Instance_Name_Failed *>(msg);
+
+ nokMsg->setObjectName(newObjName);
+ G.Out(pdGendoc," =====> send message R_O_I_N_F to
federate %d",msg->getFederate());
+ }
+
+ msg->setFederation(handle);
+ msg->setFederate(theFederateHandle);
+ // send message.
+ socket = server->getSocketLink(msg->getFederate());
+ msg->send(socket,NM_msgBufSend);
+
+ delete msg;
+}
+
+
// ----------------------------------------------------------------------------
//! Adds a new object instance to federation.
ObjectHandle
@@ -2575,5 +2616,5 @@
}} // namespace certi/rtig
-// $Id: Federation.cc,v 3.128 2010/04/28 18:48:31 erk Exp $
+// $Id: Federation.cc,v 3.129 2010/05/31 09:33:26 erk Exp $
Index: RTIG/FederationsList.hh
===================================================================
RCS file: /sources/certi/certi/RTIG/FederationsList.hh,v
retrieving revision 3.54
retrieving revision 3.55
diff -u -b -r3.54 -r3.55
--- RTIG/FederationsList.hh 19 Mar 2010 13:54:03 -0000 3.54
+++ RTIG/FederationsList.hh 31 May 2010 09:33:26 -0000 3.55
@@ -18,7 +18,7 @@
// along with this program ; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
-// $Id: FederationsList.hh,v 3.54 2010/03/19 13:54:03 erk Exp $
+// $Id: FederationsList.hh,v 3.55 2010/05/31 09:33:26 erk Exp $
// ----------------------------------------------------------------------------
#ifndef _CERTI_RTIG_FEDERATIONS_LIST_HH
@@ -315,6 +315,15 @@
SecurityError,
RTIinternalError);
+ void reserveObjectInstanceName(Handle federationHandle,
+
FederateHandle the_federate,
+ std::string
newObjName)
+ throw(IllegalName,
+ FederateNotExecutionMember,
+ SaveInProgress,
+ RestoreInProgress,
+ RTIinternalError);
+
ObjectHandle registerObject(Handle theHandle,
FederateHandle theFederateHandle,
ObjectClassHandle theClass,
@@ -661,4 +670,4 @@
#endif // _CERTI_RTIG_FEDERATIONS_LIST_HH
-// $Id: FederationsList.hh,v 3.54 2010/03/19 13:54:03 erk Exp $
+// $Id: FederationsList.hh,v 3.55 2010/05/31 09:33:26 erk Exp $
Index: RTIG/RTIG_processing.cc
===================================================================
RCS file: /sources/certi/certi/RTIG/RTIG_processing.cc,v
retrieving revision 3.102
retrieving revision 3.103
diff -u -b -r3.102 -r3.103
--- RTIG/RTIG_processing.cc 28 Apr 2010 18:45:42 -0000 3.102
+++ RTIG/RTIG_processing.cc 31 May 2010 09:33:26 -0000 3.103
@@ -18,7 +18,7 @@
// along with this program ; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
-// $Id: RTIG_processing.cc,v 3.102 2010/04/28 18:45:42 erk Exp $
+// $Id: RTIG_processing.cc,v 3.103 2010/05/31 09:33:26 erk Exp $
// ----------------------------------------------------------------------------
#include <config.h>
@@ -820,6 +820,21 @@
}
// ----------------------------------------------------------------------------
+// processReserveObjectInstanceName
+void
+RTIG::processReserveObjectInstanceName(Socket *link,
NM_Reserve_Object_Instance_Name *req)
+{
+ G.Out(pdGendoc,"enter RTIG::processReserveObjectInstanceName");
+ auditServer << "Reserve Object Name = " << req->getObjectName();
+
+ federations.reserveObjectInstanceName( req->getFederation(),
+
req->getFederate(),
+
req->getObjectName());
+
+ G.Out(pdGendoc,"exit RTIG::processReserveObjectInstanceName");
+}
+
+// ----------------------------------------------------------------------------
// processRegisterObject
void
RTIG::processRegisterObject(Socket *link, NM_Register_Object *req)
@@ -1481,4 +1496,4 @@
}} // namespace certi/rtig
-// $Id: RTIG_processing.cc,v 3.102 2010/04/28 18:45:42 erk Exp $
+// $Id: RTIG_processing.cc,v 3.103 2010/05/31 09:33:26 erk Exp $
Index: RTIG/RTIG.hh
===================================================================
RCS file: /sources/certi/certi/RTIG/RTIG.hh,v
retrieving revision 3.33
retrieving revision 3.34
diff -u -b -r3.33 -r3.34
--- RTIG/RTIG.hh 19 Mar 2010 13:54:03 -0000 3.33
+++ RTIG/RTIG.hh 31 May 2010 09:33:26 -0000 3.34
@@ -18,7 +18,7 @@
// along with this program ; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
-// $Id: RTIG.hh,v 3.33 2010/03/19 13:54:03 erk Exp $
+// $Id: RTIG.hh,v 3.34 2010/05/31 09:33:26 erk Exp $
// ----------------------------------------------------------------------------
#ifndef CERTI_RTIG_HH
@@ -97,6 +97,7 @@
void processSubscribeInteractionClass(Socket*,
NM_Subscribe_Interaction_Class*);
void processUnpublishInteractionClass(Socket*, NetworkMessage*);
void processUnsubscribeInteractionClass(Socket*, NetworkMessage*msg);
+ void processReserveObjectInstanceName(Socket *link,
NM_Reserve_Object_Instance_Name *req);
void processRegisterObject(Socket*, NM_Register_Object*);
void processUpdateAttributeValues(Socket*, NM_Update_Attribute_Values*);
void processSendInteraction(Socket*, NM_Send_Interaction*);
@@ -142,4 +143,4 @@
#endif // CERTI_RTIG_HH
-// $Id: RTIG.hh,v 3.33 2010/03/19 13:54:03 erk Exp $
+// $Id: RTIG.hh,v 3.34 2010/05/31 09:33:26 erk Exp $
Index: RTIG/Federation.hh
===================================================================
RCS file: /sources/certi/certi/RTIG/Federation.hh,v
retrieving revision 3.65
retrieving revision 3.66
diff -u -b -r3.65 -r3.66
--- RTIG/Federation.hh 19 Mar 2010 13:54:03 -0000 3.65
+++ RTIG/Federation.hh 31 May 2010 09:33:26 -0000 3.66
@@ -18,7 +18,7 @@
// along with this program ; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
-// $Id: Federation.hh,v 3.65 2010/03/19 13:54:03 erk Exp $
+// $Id: Federation.hh,v 3.66 2010/05/31 09:33:26 erk Exp $
// ----------------------------------------------------------------------------
#ifndef _CERTI_RTIG_FEDERATION_HH
@@ -280,6 +280,13 @@
RestoreInProgress,
RTIinternalError);
+ void reserveObjectInstanceName(FederateHandle theFederateHandle,
+ std::string newObjName)
+ throw (IllegalName,
+ SaveInProgress,
+ RestoreInProgress,
+ RTIinternalError);
+
ObjectHandle registerObject(FederateHandle theFederateHandle,
ObjectClassHandle theClass,
const std::string& theName)
@@ -683,4 +690,4 @@
#endif // _CERTI_RTIG_FEDERATION_HH
-// $Id: Federation.hh,v 3.65 2010/03/19 13:54:03 erk Exp $
+// $Id: Federation.hh,v 3.66 2010/05/31 09:33:26 erk Exp $
Index: RTIA/Statistics.cc
===================================================================
RCS file: /sources/certi/certi/RTIA/Statistics.cc,v
retrieving revision 3.22
retrieving revision 3.23
diff -u -b -r3.22 -r3.23
--- RTIA/Statistics.cc 14 Mar 2010 15:35:53 -0000 3.22
+++ RTIA/Statistics.cc 31 May 2010 09:33:26 -0000 3.23
@@ -215,6 +215,10 @@
FED_MSG_NAME(Message::TICK_REQUEST_NEXT);
FED_MSG_NAME(Message::TICK_REQUEST_STOP);
+ FED_MSG_NAME(Message::RESERVE_OBJECT_INSTANCE_NAME);
+ FED_MSG_NAME(Message::RESERVE_OBJECT_INSTANCE_NAME_SUCCEEDED);
+ FED_MSG_NAME(Message::RESERVE_OBJECT_INSTANCE_NAME_FAILED);
+
// RTI messages
RTI_MSG_NAME(NetworkMessage::CLOSE_CONNEXION);
RTI_MSG_NAME(NetworkMessage::MESSAGE_NULL);
@@ -305,6 +309,10 @@
RTI_MSG_NAME(NetworkMessage::START_REGISTRATION_FOR_OBJECT_CLASS);
RTI_MSG_NAME(NetworkMessage::STOP_REGISTRATION_FOR_OBJECT_CLASS);
+ RTI_MSG_NAME(NetworkMessage::RESERVE_OBJECT_INSTANCE_NAME);
+ RTI_MSG_NAME(NetworkMessage::RESERVE_OBJECT_INSTANCE_NAME_SUCCEEDED);
+ RTI_MSG_NAME(NetworkMessage::RESERVE_OBJECT_INSTANCE_NAME_FAILED);
+
initialized = true ;
}
}
@@ -374,4 +382,4 @@
#undef FED_MSG_NAME
#undef RTI_MSG_NAME
-// $Id: Statistics.cc,v 3.22 2010/03/14 15:35:53 gotthardp Exp $
+// $Id: Statistics.cc,v 3.23 2010/05/31 09:33:26 erk Exp $
Index: RTIA/ObjectManagement.cc
===================================================================
RCS file: /sources/certi/certi/RTIA/ObjectManagement.cc,v
retrieving revision 3.69
retrieving revision 3.70
diff -u -b -r3.69 -r3.70
--- RTIA/ObjectManagement.cc 23 Mar 2010 13:13:27 -0000 3.69
+++ RTIA/ObjectManagement.cc 31 May 2010 09:33:26 -0000 3.70
@@ -1057,5 +1057,27 @@
G.Out(pdGendoc,"exit
ObjectManagement::turnUpdatesOffForObjectInstance");
}
+// 1516 - 6.3
+void
+ObjectManagement::nameReservationSucceeded(const std::string &reservedName)
+{
+ M_Reserve_Object_Instance_Name_Succeeded req;
+
+ req.setObjectName(reservedName);
+
+ comm->requestFederateService(&req);
+}
+
+void
+ObjectManagement::nameReservationFailed(const std::string &reservedName)
+{
+ M_Reserve_Object_Instance_Name_Failed req;
+
+ req.setObjectName(reservedName);
+
+ comm->requestFederateService(&req);
+}
+
+
}} // namespace certi/rtia
Index: RTIA/DataDistribution.hh
===================================================================
RCS file: /sources/certi/certi/RTIA/DataDistribution.hh,v
retrieving revision 3.20
retrieving revision 3.21
diff -u -b -r3.20 -r3.21
--- RTIA/DataDistribution.hh 28 Apr 2010 18:48:31 -0000 3.20
+++ RTIA/DataDistribution.hh 31 May 2010 09:33:26 -0000 3.21
@@ -18,7 +18,7 @@
// along with this program ; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
-// $Id: DataDistribution.hh,v 3.20 2010/04/28 18:48:31 erk Exp $
+// $Id: DataDistribution.hh,v 3.21 2010/05/31 09:33:26 erk Exp $
// ----------------------------------------------------------------------------
#ifndef _CERTI_DATA_DISTRIBUTION
@@ -66,7 +66,7 @@
uint32_t, TypeException &)
throw (RegionNotKnown);
- void reserveObjectName(const std::string &);
+ void reserveObjectName(const std::string &, TypeException &);
ObjectHandle registerObject(ObjectClassHandle, const std::string&,
const std::vector <AttributeHandle> &, uint32_t,
@@ -101,4 +101,4 @@
#endif // _CERTI_DATA_DISTRIBUTION
-// $Id: DataDistribution.hh,v 3.20 2010/04/28 18:48:31 erk Exp $
+// $Id: DataDistribution.hh,v 3.21 2010/05/31 09:33:26 erk Exp $
Index: RTIA/RTIA_federate.cc
===================================================================
RCS file: /sources/certi/certi/RTIA/RTIA_federate.cc,v
retrieving revision 3.108
retrieving revision 3.109
diff -u -b -r3.108 -r3.109
--- RTIA/RTIA_federate.cc 28 Apr 2010 18:48:31 -0000 3.108
+++ RTIA/RTIA_federate.cc 31 May 2010 09:33:26 -0000 3.109
@@ -377,6 +377,7 @@
ROINr->setObjectName(ROINq->getObjectName());
+ ddm->reserveObjectName(ROINq->getObjectName(), e);
@@ -395,7 +396,10 @@
ROIr->setObject(om->registerObject(ROIq->getObjectClass(),
ROIq->getObjectName(),
- date, heure, e));
+
date,
+
heure,
+
e)
+ );
break ;
}
@@ -1196,7 +1200,7 @@
tm->_tick_multiple = TRq->getMultiple();
tm->_tick_result = false; // default return value
- if (TRq->getMinTickTime() > 0.0) {
+ if (TRq->getMinTickTime() >= 0.0) {
tm->_tick_timeout = TRq->getMinTickTime();
tm->_tick_max_tick = TRq->getMaxTickTime();
tm->_tick_clock_start = clock->getCurrentTicksValue();
Index: RTIA/DataDistribution.cc
===================================================================
RCS file: /sources/certi/certi/RTIA/DataDistribution.cc,v
retrieving revision 3.35
retrieving revision 3.36
diff -u -b -r3.35 -r3.36
--- RTIA/DataDistribution.cc 28 Apr 2010 18:48:31 -0000 3.35
+++ RTIA/DataDistribution.cc 31 May 2010 09:33:26 -0000 3.36
@@ -18,7 +18,7 @@
// along with this program ; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
-// $Id: DataDistribution.cc,v 3.35 2010/04/28 18:48:31 erk Exp $
+// $Id: DataDistribution.cc,v 3.36 2010/05/31 09:33:26 erk Exp $
// ----------------------------------------------------------------------------
#include <config.h>
@@ -249,16 +249,24 @@
// ----------------------------------------------------------------------------
void
-DataDistribution::reserveObjectName(const std::string &newObjName)
+DataDistribution::reserveObjectName(const std::string &newObjName,
TypeException &e)
{
NM_Reserve_Object_Instance_Name req;
+ // Empty strings not allowed
+ if (newObjName.size() <= 0 ||
+ // According to spec, the HLA prefix is reserved for
RTI-internal objects.
+ newObjName.compare(0, 3, "HLA") == 0 )
+ {
+ e = e_IllegalName;
+ } else {
req.setFederation(fm->_numero_federation);
req.setFederate(fm->federate);
req.setObjectName(newObjName);
comm->sendMessage(&req);
+ }
// JvY TODO: Finish handling on other side (and return path)
}
@@ -433,4 +441,4 @@
}} // namespace certi::rtia
-// $Id: DataDistribution.cc,v 3.35 2010/04/28 18:48:31 erk Exp $
+// $Id: DataDistribution.cc,v 3.36 2010/05/31 09:33:26 erk Exp $
Index: RTIA/TimeManagement.cc
===================================================================
RCS file: /sources/certi/certi/RTIA/TimeManagement.cc,v
retrieving revision 3.58
retrieving revision 3.59
diff -u -b -r3.58 -r3.59
--- RTIA/TimeManagement.cc 23 Mar 2010 13:13:27 -0000 3.58
+++ RTIA/TimeManagement.cc 31 May 2010 09:33:26 -0000 3.59
@@ -18,7 +18,7 @@
// along with this program ; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
-// $Id: TimeManagement.cc,v 3.58 2010/03/23 13:13:27 erk Exp $
+// $Id: TimeManagement.cc,v 3.59 2010/05/31 09:33:26 erk Exp $
// ----------------------------------------------------------------------------
#include <config.h>
@@ -385,6 +385,19 @@
}
break;
+ case NetworkMessage::RESERVE_OBJECT_INSTANCE_NAME_SUCCEEDED:
+ {
+ NM_Reserve_Object_Instance_Name_Succeeded ROINS =
static_cast<NM_Reserve_Object_Instance_Name_Succeeded&>(msg);
+ om->nameReservationSucceeded(ROINS.getObjectName());
+ }
+ break;
+ case NetworkMessage::RESERVE_OBJECT_INSTANCE_NAME_FAILED:
+ {
+ NM_Reserve_Object_Instance_Name_Failed ROINF =
static_cast<NM_Reserve_Object_Instance_Name_Failed&>(msg);
+ om->nameReservationFailed(ROINF.getObjectName());
+ }
+ break;
+
default:
D.Out(pdExcept, "Unknown message type in executeFederateService.");
throw RTIinternalError(stringize() <<
@@ -1010,4 +1023,4 @@
}} // namespaces
-// $Id: TimeManagement.cc,v 3.58 2010/03/23 13:13:27 erk Exp $
+// $Id: TimeManagement.cc,v 3.59 2010/05/31 09:33:26 erk Exp $
Index: RTIA/ObjectManagement.hh
===================================================================
RCS file: /sources/certi/certi/RTIA/ObjectManagement.hh,v
retrieving revision 3.34
retrieving revision 3.35
diff -u -b -r3.34 -r3.35
--- RTIA/ObjectManagement.hh 19 Mar 2010 13:54:03 -0000 3.34
+++ RTIA/ObjectManagement.hh 31 May 2010 09:33:26 -0000 3.35
@@ -18,7 +18,7 @@
// along with this program ; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
-// $Id: ObjectManagement.hh,v 3.34 2010/03/19 13:54:03 erk Exp $
+// $Id: ObjectManagement.hh,v 3.35 2010/05/31 09:33:26 erk Exp $
// ----------------------------------------------------------------------------
#ifndef _CERTI_RTIA_OM
@@ -241,6 +241,11 @@
const uint16_t attribArraySize,
TypeException &e);
+ // 1516 - 6.3
+ void nameReservationSucceeded(const std::string &reservedName);
+ void nameReservationFailed(const std::string &reservedName);
+
+
// RTI Support Services
ObjectClassHandle getObjectClassHandle(const std::string& theName);
const std::string& getObjectClassName(ObjectClassHandle);
@@ -298,4 +303,4 @@
#endif // _CERTI_RTIA_OM
-// $Id: ObjectManagement.hh,v 3.34 2010/03/19 13:54:03 erk Exp $
+// $Id: ObjectManagement.hh,v 3.35 2010/05/31 09:33:26 erk Exp $
Index: libCERTI/RootObject.hh
===================================================================
RCS file: /sources/certi/certi/libCERTI/RootObject.hh,v
retrieving revision 3.35
retrieving revision 3.36
diff -u -b -r3.35 -r3.36
--- libCERTI/RootObject.hh 25 Nov 2009 22:05:19 -0000 3.35
+++ libCERTI/RootObject.hh 31 May 2010 09:33:26 -0000 3.36
@@ -19,7 +19,7 @@
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
// USA
//
-// $Id: RootObject.hh,v 3.35 2009/11/25 22:05:19 erk Exp $
+// $Id: RootObject.hh,v 3.36 2010/05/31 09:33:26 erk Exp $
// ----------------------------------------------------------------------------
#ifndef LIBCERTI_ROOT_OBJECT
@@ -44,6 +44,7 @@
#include "SecurityServer.hh"
#include "HandleManager.hh"
#include "RoutingSpace.hh"
+#include "NameReservation.hh"
#include <vector>
@@ -106,6 +107,8 @@
throw (RegionNotKnown, InvalidExtents);
// Object Management
+ bool reserveObjectInstanceName(FederateHandle the_federate,
+ const
std::string &the_object_name);
void registerObjectInstance(FederateHandle, ObjectClassHandle,
ObjectHandle,
const std::string&)
throw (InvalidObjectHandle,
@@ -168,6 +171,11 @@
ObjectSet *objects;
/**
+ * The set of reserved names.
+ */
+ NameReservationSet *reservedNames;
+
+ /**
* Serialize the federate object model into a message buffer.
*/
void convertToSerializedFOM(NM_Join_Federation_Execution& message);
@@ -194,4 +202,4 @@
#endif // LIBCERTI_ROOT_OBJECT
-// $Id: RootObject.hh,v 3.35 2009/11/25 22:05:19 erk Exp $
+// $Id: RootObject.hh,v 3.36 2010/05/31 09:33:26 erk Exp $
Index: libCERTI/Exception.cc
===================================================================
RCS file: /sources/certi/certi/libCERTI/Exception.cc,v
retrieving revision 3.20
retrieving revision 3.21
diff -u -b -r3.20 -r3.21
--- libCERTI/Exception.cc 29 Mar 2010 18:24:20 -0000 3.20
+++ libCERTI/Exception.cc 31 May 2010 09:33:26 -0000 3.21
@@ -19,7 +19,7 @@
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
// USA
//
-// $Id: Exception.cc,v 3.20 2010/03/29 18:24:20 erk Exp $
+// $Id: Exception.cc,v 3.21 2010/05/31 09:33:26 erk Exp $
// ----------------------------------------------------------------------------
#include "Exception.hh"
@@ -148,6 +148,8 @@
long certi::SocketSHMNotOpen::_type = certi::e_SocketSHMNotOpen ;
long certi::SocketSHMNotDeleted::_type = certi::e_SocketSHMNotDeleted ;
+long certi::IllegalName::_type = certi::e_IllegalName ;
+
static PrettyDebug PD_Exception("CERTI_EXCEPTION",__FILE__);
const std::string certi::Exception::displayMe() const
@@ -172,4 +174,4 @@
Debug(PD_Exception, pdExcept) << msg.str();
return msg.str();
}
-// $Id: Exception.cc,v 3.20 2010/03/29 18:24:20 erk Exp $
+// $Id: Exception.cc,v 3.21 2010/05/31 09:33:26 erk Exp $
Index: libCERTI/CMakeLists.txt
===================================================================
RCS file: /sources/certi/certi/libCERTI/CMakeLists.txt,v
retrieving revision 1.35
retrieving revision 1.36
diff -u -b -r1.35 -r1.36
--- libCERTI/CMakeLists.txt 4 Apr 2010 18:27:49 -0000 1.35
+++ libCERTI/CMakeLists.txt 31 May 2010 09:33:26 -0000 1.36
@@ -31,6 +31,7 @@
ObjectClassSet.cc
ObjectSet.cc
Named.cc
+ NameReservation.cc
Parameter.cc
RootObject.cc
Subscribable.cc
@@ -42,6 +43,7 @@
ObjectClassSet.hh
ObjectSet.hh
Named.hh
+ NameReservation.hh
Parameter.hh
RootObject.hh
Subscribable.hh
Index: libCERTI/Exception.hh
===================================================================
RCS file: /sources/certi/certi/libCERTI/Exception.hh,v
retrieving revision 3.10
retrieving revision 3.11
diff -u -b -r3.10 -r3.11
--- libCERTI/Exception.hh 29 Mar 2010 18:24:20 -0000 3.10
+++ libCERTI/Exception.hh 31 May 2010 09:33:26 -0000 3.11
@@ -20,7 +20,7 @@
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
// USA
//
-// $Id: Exception.hh,v 3.10 2010/03/29 18:24:20 erk Exp $
+// $Id: Exception.hh,v 3.11 2010/05/31 09:33:26 erk Exp $
// ----------------------------------------------------------------------------
#ifndef _CERTI_EXCEPTION_HH
@@ -150,7 +150,8 @@
e_TimeRegulationAlreadyEnabled,
e_TimeRegulationWasNotEnabled,
e_NetworkError,
- e_NetworkSignal
+ e_NetworkSignal,
+ e_IllegalName //1516 only
} TypeException ;
class CERTI_EXPORT Exception
@@ -255,6 +256,9 @@
CERTI_EXCEPTION(ValueCountExceeded)
CERTI_EXCEPTION(ValueLengthExceeded)
+// RTI1516 Exceptions for use inside libCERTI
+CERTI_EXCEPTION(IllegalName)
+
// Additional CERTI exceptions
CERTI_EXCEPTION(FederateNotPublishing)
CERTI_EXCEPTION(FederateNotSubscribing)
@@ -299,4 +303,4 @@
#endif // _CERTI_EXCEPTION_HH
-// $Id: Exception.hh,v 3.10 2010/03/29 18:24:20 erk Exp $
+// $Id: Exception.hh,v 3.11 2010/05/31 09:33:26 erk Exp $
Index: libCERTI/ObjectSet.cc
===================================================================
RCS file: /sources/certi/certi/libCERTI/ObjectSet.cc,v
retrieving revision 3.32
retrieving revision 3.33
diff -u -b -r3.32 -r3.33
--- libCERTI/ObjectSet.cc 23 Mar 2010 13:13:27 -0000 3.32
+++ libCERTI/ObjectSet.cc 31 May 2010 09:33:26 -0000 3.33
@@ -413,6 +413,22 @@
}
// ----------------------------------------------------------------------------
+Object *
+ObjectSet::getObjectByName(const std::string &the_object_name) const
+{
+ std::map<ObjectHandle, Object *>::const_iterator i ;
+ for (i = begin(); i != end(); i++) {
+ if (i->second != 0 &&
+ i->second->getName() == the_object_name)
+ {
+ return i->second;
+ }
+ }
+
+ return 0;
+}
+
+// ----------------------------------------------------------------------------
//! sendToFederate.
void
ObjectSet::sendToFederate(NetworkMessage *msg,
@@ -459,4 +475,4 @@
}
} // namespace certi
-// $Id: ObjectSet.cc,v 3.32 2010/03/23 13:13:27 erk Exp $
+// $Id: ObjectSet.cc,v 3.33 2010/05/31 09:33:26 erk Exp $
Index: libCERTI/ObjectSet.hh
===================================================================
RCS file: /sources/certi/certi/libCERTI/ObjectSet.hh,v
retrieving revision 3.17
retrieving revision 3.18
diff -u -b -r3.17 -r3.18
--- libCERTI/ObjectSet.hh 19 Mar 2010 13:54:03 -0000 3.17
+++ libCERTI/ObjectSet.hh 31 May 2010 09:33:26 -0000 3.18
@@ -162,6 +162,8 @@
Object *getObject(ObjectHandle the_object) const
throw (ObjectNotKnown);
+ Object *getObjectByName(const std::string &the_object_name) const;
+
protected:
void sendToFederate(NetworkMessage *msg,
FederateHandle the_federate) const ;
@@ -172,6 +174,11 @@
typedef std::map<std::string,Object*,std::less<std::string> >
Name2ObjectMap_t;
typedef Handle2ObjectMap_t::const_iterator handledO_const_iterator;
typedef Name2ObjectMap_t::const_iterator namedO_const_iterator;
+ /*
+ * FIXME Erk --> those map are unused which is just a shame
+ * this looks like unfinished work. ObjectSet should not inherit
+ * from map<...> but include (and use) the two following maps
+ */
Handle2ObjectMap_t OFromHandle;
Name2ObjectMap_t OFromName;
/* The message buffer used to send Network messages */
Index: libCERTI/RootObject.cc
===================================================================
RCS file: /sources/certi/certi/libCERTI/RootObject.cc,v
retrieving revision 3.50
retrieving revision 3.51
diff -u -b -r3.50 -r3.51
--- libCERTI/RootObject.cc 19 Mar 2010 13:54:03 -0000 3.50
+++ libCERTI/RootObject.cc 31 May 2010 09:33:26 -0000 3.51
@@ -19,7 +19,7 @@
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
// USA
//
-// $Id: RootObject.cc,v 3.50 2010/03/19 13:54:03 erk Exp $
+// $Id: RootObject.cc,v 3.51 2010/05/31 09:33:26 erk Exp $
// ----------------------------------------------------------------------------
#include "Object.hh"
@@ -36,6 +36,7 @@
#include "PrettyDebug.hh"
#include "NM_Classes.hh"
#include "helper.hh"
+#include "NameReservation.hh"
#include <string>
#include <stdio.h>
@@ -62,6 +63,7 @@
/* this interaction class set is the root one */
Interactions = new InteractionSet(server,true);
objects = new ObjectSet(server);
+ reservedNames = new NameReservationSet();
}
RootObject::~RootObject()
@@ -69,6 +71,7 @@
delete ObjectClasses ;
delete Interactions ;
delete objects ;
+ delete reservedNames ;
}
// ----------------------------------------------------------------------------
@@ -229,6 +232,45 @@
}
// ----------------------------------------------------------------------------
+bool
+RootObject::reserveObjectInstanceName(FederateHandle the_federate,
+ const
std::string &the_object_name)
+{
+ // Empty strings not allowed
+ if (the_object_name.size() <= 0)
+ {
+ return false;
+ }
+
+ // According to spec, the HLA prefix is reserved for RTI-internal
objects.
+ if (the_object_name.compare(0, 3, "HLA") == 0)
+ {
+ return false;
+ }
+
+ // Name reservation clashes with registered object?
+ Object *object = objects->getObjectByName(the_object_name);
+ if (object != 0)
+ {
+ return false;
+ }
+
+ // Name reservation clashes with other reserved name?
+ NameReservationSet::const_iterator it =
reservedNames->find(the_object_name);
+ if (it != reservedNames->end() )
+ {
+ return false;
+ }
+
+ // Make name reservation
+ NameReservation *nr = new NameReservation(the_federate,
the_object_name);
+ std::pair<std::string, NameReservation *> nr_pair(the_object_name, nr);
+ reservedNames->insert(nr_pair);
+
+ return true;
+}
+
+// ----------------------------------------------------------------------------
void
RootObject::registerObjectInstance(FederateHandle the_federate,
ObjectClassHandle the_class,
@@ -244,6 +286,17 @@
"Federate %d attempts to register instance %d in class %d.",
the_federate, the_object, the_class);
+ NameReservationSet::iterator it = reservedNames->find(the_object_name);
+ if (it != reservedNames->end() )
+ {
+ const NameReservation *nr = it->second;
+ if (nr->getHandle() != the_federate)
+ {
+ throw ObjectAlreadyRegistered("The name was reserved by
another federate.");
+ }
+ }
+
+
Object *object ;
object = objects->registerObjectInstance(the_federate, the_class,
the_object, the_object_name);
@@ -258,6 +311,14 @@
objects->deleteObjectInstance(the_federate, the_object, "");
throw;
}
+
+ if (it != reservedNames->end() )
+ {
+ NameReservation *nr = it->second;
+ reservedNames->erase(it);
+ delete nr;
+ }
+
}
// ----------------------------------------------------------------------------
@@ -560,4 +621,4 @@
} // namespace certi
-// $Id: RootObject.cc,v 3.50 2010/03/19 13:54:03 erk Exp $
+// $Id: RootObject.cc,v 3.51 2010/05/31 09:33:26 erk Exp $
Index: include/RTI/SpecificConfig.h
===================================================================
RCS file: /sources/certi/certi/include/RTI/SpecificConfig.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- include/RTI/SpecificConfig.h 24 Nov 2009 21:44:48 -0000 1.2
+++ include/RTI/SpecificConfig.h 31 May 2010 09:33:26 -0000 1.3
@@ -9,6 +9,23 @@
#ifndef RTI_SpecificConfig_h
#define RTI_SpecificConfig_h
+#ifdef _MSC_VER
+#ifndef FAKED_INTTYPES_DEFINED
+#define FAKED_INTTYPES_DEFINED
+typedef unsigned __int64 uint64_t;
+typedef signed __int64 int64_t;
+typedef unsigned __int32 uint32_t;
+typedef signed __int32 int32_t;
+typedef unsigned __int16 uint16_t;
+typedef signed __int16 int16_t;
+typedef unsigned __int8 uint8_t;
+typedef signed __int8 int8_t;
+typedef short int int_least16_t;
+#endif
+#else
+#include <inttypes.h>
+#endif
+
#if defined(_WIN32)
#if defined(_MSC_VER) && defined(RTI_DISABLE_WARNINGS)
// disable warning about truncating template instantiation symbol names
Index: libCERTI/NameReservation.hh
===================================================================
RCS file: libCERTI/NameReservation.hh
diff -N libCERTI/NameReservation.hh
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ libCERTI/NameReservation.hh 31 May 2010 09:33:26 -0000 3.1
@@ -0,0 +1,56 @@
+// ----------------------------------------------------------------------------
+// CERTI - HLA RunTime Infrastructure
+// Copyright (C) 2004 ONERA
+//
+// This file is part of CERTI-libCERTI
+//
+// CERTI-libCERTI 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-libCERTI 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: NameReservation.hh,v 3.1 2010/05/31 09:33:26 erk Exp $
+// ----------------------------------------------------------------------------
+
+#ifndef LIBCERTI_NAME_RESERVATION_HH
+#define LIBCERTI_NAME_RESERVATION_HH
+
+#include <map>
+#include "certi.hh"
+#include "Named.hh"
+#include "Handled.hh"
+
+namespace certi {
+
+class NameReservation;
+
+typedef std::map<std::string, NameReservation *> NameReservationSet;
+
+class CERTI_EXPORT NameReservation : public Named, public
Handled<FederateHandle>
+{
+public:
+ NameReservation(FederateHandle the_owner, std::string the_name)
+ : Named(the_name)
+ , Handled<FederateHandle>(the_owner)
+ {
+ }
+
+ virtual ~NameReservation()
+ {
+ }
+
+};
+
+} // namespace certi
+
+#endif // LIBCERTI_NAME_RESERVATION_HH
\ No newline at end of file
Index: libCERTI/NameReservation.cc
===================================================================
RCS file: libCERTI/NameReservation.cc
diff -N libCERTI/NameReservation.cc
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [certi-cvs] certi libRTI/RTI1516ambassadorFactory.cpp libRT...,
certi-cvs <=