X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=simgear%2Fhla%2FRTI13ObjectClass.cxx;h=fcc41682cbdda9520f996dc142c9d2e14c624ad3;hb=086a30e61aa153008bd403c79cd1bff3ad594179;hp=e2ccd4973e21fed9cfae89d33bca5b9a99242c5c;hpb=baf511684119e219906fa37f3e7c7f43151bb435;p=simgear.git diff --git a/simgear/hla/RTI13ObjectClass.cxx b/simgear/hla/RTI13ObjectClass.cxx index e2ccd497..fcc41682 100644 --- a/simgear/hla/RTI13ObjectClass.cxx +++ b/simgear/hla/RTI13ObjectClass.cxx @@ -37,12 +37,11 @@ RTI13ObjectClass::~RTI13ObjectClass() std::string RTI13ObjectClass::getName() const { - SGSharedPtr ambassador = _ambassador.lock(); - if (!ambassador.valid()) { + if (!_ambassador.valid()) { SG_LOG(SG_NETWORK, SG_WARN, "Error: Ambassador is zero."); return std::string(); } - return ambassador->getObjectClassName(_handle); + return _ambassador->getObjectClassName(_handle); } unsigned @@ -54,14 +53,13 @@ RTI13ObjectClass::getNumAttributes() const unsigned RTI13ObjectClass::getAttributeIndex(const std::string& name) const { - SGSharedPtr ambassador = _ambassador.lock(); - if (!ambassador.valid()) { + if (!_ambassador.valid()) { SG_LOG(SG_NETWORK, SG_WARN, "Error: Ambassador is zero."); return ~0u; } try { - RTI::AttributeHandle attributeHandle = ambassador->getAttributeHandle(name, _handle); + RTI::AttributeHandle attributeHandle = _ambassador->getAttributeHandle(name, _handle); AttributeHandleIndexMap::const_iterator i = _attributeHandleIndexMap.find(attributeHandle); if (i != _attributeHandleIndexMap.end()) @@ -93,14 +91,13 @@ RTI13ObjectClass::getAttributeIndex(const std::string& name) const unsigned RTI13ObjectClass::getOrCreateAttributeIndex(const std::string& name) { - SGSharedPtr ambassador = _ambassador.lock(); - if (!ambassador.valid()) { + if (!_ambassador.valid()) { SG_LOG(SG_NETWORK, SG_WARN, "Error: Ambassador is zero."); return ~0u; } try { - RTI::AttributeHandle attributeHandle = ambassador->getAttributeHandle(name, _handle); + RTI::AttributeHandle attributeHandle = _ambassador->getAttributeHandle(name, _handle); AttributeHandleIndexMap::const_iterator i = _attributeHandleIndexMap.find(attributeHandle); if (i != _attributeHandleIndexMap.end()) @@ -169,8 +166,7 @@ RTI13ObjectClass::getOrCreateAttributeIndex(const std::string& name) bool RTI13ObjectClass::publish(const std::set& indexSet) { - SGSharedPtr ambassador = _ambassador.lock(); - if (!ambassador.valid()) { + if (!_ambassador.valid()) { SG_LOG(SG_NETWORK, SG_WARN, "Error: Ambassador is zero."); return false; } @@ -185,7 +181,7 @@ RTI13ObjectClass::publish(const std::set& indexSet) attributeHandleSet->add(_attributeHandleVector[*i]); } - ambassador->publishObjectClass(_handle, *attributeHandleSet); + _ambassador->publishObjectClass(_handle, *attributeHandleSet); for (unsigned i = 0; i < getNumAttributes(); ++i) { _attributeDataVector[i]._published = true; @@ -225,14 +221,13 @@ RTI13ObjectClass::publish(const std::set& indexSet) bool RTI13ObjectClass::unpublish() { - SGSharedPtr ambassador = _ambassador.lock(); - if (!ambassador.valid()) { + if (!_ambassador.valid()) { SG_LOG(SG_NETWORK, SG_WARN, "Error: Ambassador is zero."); return false; } try { - ambassador->unpublishObjectClass(_handle); + _ambassador->unpublishObjectClass(_handle); for (unsigned i = 0; i < getNumAttributes(); ++i) { _attributeDataVector[i]._published = false; @@ -272,8 +267,7 @@ RTI13ObjectClass::unpublish() bool RTI13ObjectClass::subscribe(const std::set& indexSet, bool active) { - SGSharedPtr ambassador = _ambassador.lock(); - if (!ambassador.valid()) { + if (!_ambassador.valid()) { SG_LOG(SG_NETWORK, SG_WARN, "Error: Ambassador is zero."); return false; } @@ -289,7 +283,7 @@ RTI13ObjectClass::subscribe(const std::set& indexSet, bool active) attributeHandleSet->add(_attributeHandleVector[*i]); } - ambassador->subscribeObjectClassAttributes(_handle, *attributeHandleSet, active); + _ambassador->subscribeObjectClassAttributes(_handle, *attributeHandleSet, active); for (unsigned i = 0; i < getNumAttributes(); ++i) { _attributeDataVector[i]._subscribed = true; @@ -326,14 +320,13 @@ RTI13ObjectClass::subscribe(const std::set& indexSet, bool active) bool RTI13ObjectClass::unsubscribe() { - SGSharedPtr ambassador = _ambassador.lock(); - if (!ambassador.valid()) { + if (!_ambassador.valid()) { SG_LOG(SG_NETWORK, SG_WARN, "Error: Ambassador is zero."); return 0; } try { - ambassador->unsubscribeObjectClass(_handle); + _ambassador->unsubscribeObjectClass(_handle); for (unsigned i = 0; i < getNumAttributes(); ++i) { _attributeDataVector[i]._subscribed = false; @@ -370,14 +363,22 @@ RTI13ObjectClass::unsubscribe() RTIObjectInstance* RTI13ObjectClass::registerObjectInstance(HLAObjectInstance* hlaObjectInstance) { - SGSharedPtr ambassador = _ambassador.lock(); - if (!ambassador.valid()) { + if (!_ambassador.valid()) { SG_LOG(SG_NETWORK, SG_WARN, "Error: Ambassador is zero."); return 0; } + SGSharedPtr federate = _ambassador->_federate.lock(); + if (!federate.valid()) { + SG_LOG(SG_NETWORK, SG_WARN, "Error: Federate is zero."); + return 0; + } + try { - return ambassador->registerObjectInstance(this, hlaObjectInstance); + RTI::ObjectHandle objectHandle = _ambassador->registerObjectInstance(getHandle()); + RTI13ObjectInstance* objectInstance = new RTI13ObjectInstance(objectHandle, hlaObjectInstance, this, _ambassador.get(), true); + federate->insertObjectInstance(objectInstance); + return objectInstance; } catch (RTI::ObjectClassNotDefined& e) { SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not register object instance: " << e._name << " " << e._reason); return 0;