1 // Copyright (C) 2009 - 2011 Mathias Froehlich - Mathias.Froehlich@web.de
3 // This library is free software; you can redistribute it and/or
4 // modify it under the terms of the GNU Library General Public
5 // License as published by the Free Software Foundation; either
6 // version 2 of the License, or (at your option) any later version.
8 // This library is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 // Library General Public License for more details.
13 // You should have received a copy of the GNU General Public License
14 // along with this program; if not, write to the Free Software
15 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
18 #include "RTI13Federate.hxx"
20 #include "RTI13Ambassador.hxx"
24 static std::string toStdString(const char* n)
28 return std::string(n);
31 /// Just the interface class doing the callbacks into the parent class
32 struct RTI13Federate::FederateAmbassador : public RTI::FederateAmbassador {
33 FederateAmbassador() :
34 _timeRegulationEnabled(false),
35 _timeConstrainedEnabled(false),
36 _timeAdvancePending(false)
39 virtual ~FederateAmbassador()
40 throw (RTI::FederateInternalError)
44 /// RTI federate ambassador callback functions.
45 virtual void synchronizationPointRegistrationSucceeded(const char* label)
46 throw (RTI::FederateInternalError)
50 virtual void synchronizationPointRegistrationFailed(const char* label)
51 throw (RTI::FederateInternalError)
55 virtual void announceSynchronizationPoint(const char* label, const char* tag)
56 throw (RTI::FederateInternalError)
58 _pendingSyncLabels.insert(toStdString(label));
61 virtual void federationSynchronized(const char* label)
62 throw (RTI::FederateInternalError)
64 std::string s = toStdString(label);
65 _pendingSyncLabels.erase(s);
66 _syncronizedSyncLabels.insert(s);
69 virtual void initiateFederateSave(const char* label)
70 throw (RTI::UnableToPerformSave,
71 RTI::FederateInternalError)
75 virtual void federationSaved()
76 throw (RTI::FederateInternalError)
80 virtual void federationNotSaved()
81 throw (RTI::FederateInternalError)
85 virtual void requestFederationRestoreSucceeded(const char* label)
86 throw (RTI::FederateInternalError)
90 virtual void requestFederationRestoreFailed(const char* label, const char* reason)
91 throw (RTI::FederateInternalError)
95 virtual void federationRestoreBegun()
96 throw (RTI::FederateInternalError)
100 virtual void initiateFederateRestore(const char* label, RTI::FederateHandle federateHandle)
101 throw (RTI::SpecifiedSaveLabelDoesNotExist,
102 RTI::CouldNotRestore,
103 RTI::FederateInternalError)
107 virtual void federationRestored()
108 throw (RTI::FederateInternalError)
112 virtual void federationNotRestored()
113 throw (RTI::FederateInternalError)
117 // Declaration Management
118 virtual void startRegistrationForObjectClass(RTI::ObjectClassHandle objectClassHandle)
119 throw (RTI::ObjectClassNotPublished,
120 RTI::FederateInternalError)
122 ObjectClassMap::iterator i = _objectClassMap.find(objectClassHandle);
123 if (i == _objectClassMap.end())
125 if (!i->second.valid())
127 i->second->startRegistration();
130 virtual void stopRegistrationForObjectClass(RTI::ObjectClassHandle objectClassHandle)
131 throw (RTI::ObjectClassNotPublished,
132 RTI::FederateInternalError)
134 ObjectClassMap::iterator i = _objectClassMap.find(objectClassHandle);
135 if (i == _objectClassMap.end())
137 if (!i->second.valid())
139 i->second->stopRegistration();
142 virtual void turnInteractionsOn(RTI::InteractionClassHandle interactionClassHandle)
143 throw (RTI::InteractionClassNotPublished,
144 RTI::FederateInternalError)
148 virtual void turnInteractionsOff(RTI::InteractionClassHandle interactionClassHandle)
149 throw (RTI::InteractionClassNotPublished,
150 RTI::FederateInternalError)
156 virtual void discoverObjectInstance(RTI::ObjectHandle objectHandle, RTI::ObjectClassHandle objectClassHandle, const char* tag)
157 throw (RTI::CouldNotDiscover,
158 RTI::ObjectClassNotKnown,
159 RTI::FederateInternalError)
161 ObjectClassMap::iterator i = _objectClassMap.find(objectClassHandle);
162 if (i == _objectClassMap.end())
163 throw RTI::ObjectClassNotKnown("Federate: discoverObjectInstance()!");
164 if (!i->second.valid())
166 SGSharedPtr<RTI13ObjectInstance> objectInstance = new RTI13ObjectInstance(objectHandle, 0, i->second, _rtiAmbassador.get(), false);
167 _objectInstanceMap[objectHandle] = objectInstance;
168 _queueCallbackList.push_back(new DiscoverObjectCallback(i->second, objectInstance, tagToData(tag)));
171 virtual void reflectAttributeValues(RTI::ObjectHandle objectHandle, const RTI::AttributeHandleValuePairSet& attributeValuePairSet,
172 const RTI::FedTime& fedTime, const char* tag, RTI::EventRetractionHandle eventRetractionHandle)
173 throw (RTI::ObjectNotKnown,
174 RTI::AttributeNotKnown,
175 RTI::FederateOwnsAttributes,
176 RTI::InvalidFederationTime,
177 RTI::FederateInternalError)
179 ObjectInstanceMap::iterator i = _objectInstanceMap.find(objectHandle);
180 if (i == _objectInstanceMap.end())
181 throw RTI::ObjectNotKnown("Reflect attributes for unknown object!");
182 if (!i->second.valid())
184 i->second->reflectAttributeValues(attributeValuePairSet, RTI13Ambassador::toTimeStamp(fedTime), tagToData(tag));
187 virtual void reflectAttributeValues(RTI::ObjectHandle objectHandle, const RTI::AttributeHandleValuePairSet& attributeValuePairSet,
189 throw (RTI::ObjectNotKnown,
190 RTI::AttributeNotKnown,
191 RTI::FederateOwnsAttributes,
192 RTI::FederateInternalError)
194 ObjectInstanceMap::iterator i = _objectInstanceMap.find(objectHandle);
195 if (i == _objectInstanceMap.end())
196 throw RTI::ObjectNotKnown("Reflect attributes for unknown object!");
197 if (!i->second.valid())
199 i->second->reflectAttributeValues(attributeValuePairSet, tagToData(tag));
202 virtual void receiveInteraction(RTI::InteractionClassHandle interactionClassHandle, const RTI::ParameterHandleValuePairSet& parameters,
203 const RTI::FedTime& fedTime, const char* tag, RTI::EventRetractionHandle eventRetractionHandle)
204 throw (RTI::InteractionClassNotKnown,
205 RTI::InteractionParameterNotKnown,
206 RTI::InvalidFederationTime,
207 RTI::FederateInternalError)
211 virtual void receiveInteraction(RTI::InteractionClassHandle interactionClassHandle,
212 const RTI::ParameterHandleValuePairSet& parameters, const char* tag)
213 throw (RTI::InteractionClassNotKnown,
214 RTI::InteractionParameterNotKnown,
215 RTI::FederateInternalError)
219 virtual void removeObjectInstance(RTI::ObjectHandle objectHandle, const RTI::FedTime& fedTime,
220 const char* tag, RTI::EventRetractionHandle eventRetractionHandle)
221 throw (RTI::ObjectNotKnown,
222 RTI::InvalidFederationTime,
223 RTI::FederateInternalError)
225 ObjectInstanceMap::iterator i = _objectInstanceMap.find(objectHandle);
226 if (i == _objectInstanceMap.end())
227 throw RTI::ObjectNotKnown("Federate: removeObjectInstance()!");
228 if (i->second.valid())
229 _queueCallbackList.push_back(new RemoveObjectCallback(i->second, tagToData(tag)));
230 _objectInstanceMap.erase(i);
233 virtual void removeObjectInstance(RTI::ObjectHandle objectHandle, const char* tag)
234 throw (RTI::ObjectNotKnown,
235 RTI::FederateInternalError)
237 ObjectInstanceMap::iterator i = _objectInstanceMap.find(objectHandle);
238 if (i == _objectInstanceMap.end())
239 throw RTI::ObjectNotKnown("Federate: removeObjectInstance()!");
240 if (i->second.valid())
241 _queueCallbackList.push_back(new RemoveObjectCallback(i->second, tagToData(tag)));
242 _objectInstanceMap.erase(i);
245 virtual void attributesInScope(RTI::ObjectHandle objectHandle, const RTI::AttributeHandleSet& attributes)
246 throw (RTI::ObjectNotKnown,
247 RTI::AttributeNotKnown,
248 RTI::FederateInternalError)
250 ObjectInstanceMap::iterator i = _objectInstanceMap.find(objectHandle);
251 if (i == _objectInstanceMap.end())
252 throw RTI::ObjectNotKnown("Attributes in scope for unknown object!");
253 if (!i->second.valid())
255 i->second->attributesInScope(attributes);
258 virtual void attributesOutOfScope(RTI::ObjectHandle objectHandle, const RTI::AttributeHandleSet& attributes)
259 throw (RTI::ObjectNotKnown,
260 RTI::AttributeNotKnown,
261 RTI::FederateInternalError)
263 ObjectInstanceMap::iterator i = _objectInstanceMap.find(objectHandle);
264 if (i == _objectInstanceMap.end())
265 throw RTI::ObjectNotKnown("Attributes in scope for unknown object!");
266 if (!i->second.valid())
268 i->second->attributesOutOfScope(attributes);
271 virtual void provideAttributeValueUpdate(RTI::ObjectHandle objectHandle, const RTI::AttributeHandleSet& attributes)
272 throw (RTI::ObjectNotKnown,
273 RTI::AttributeNotKnown,
274 RTI::AttributeNotOwned,
275 RTI::FederateInternalError)
277 ObjectInstanceMap::iterator i = _objectInstanceMap.find(objectHandle);
278 if (i == _objectInstanceMap.end())
279 throw RTI::ObjectNotKnown("Reflect attributes for unknown object!");
280 if (!i->second.valid())
282 i->second->provideAttributeValueUpdate(attributes);
285 virtual void turnUpdatesOnForObjectInstance(RTI::ObjectHandle objectHandle, const RTI::AttributeHandleSet& attributes)
286 throw (RTI::ObjectNotKnown,
287 RTI::AttributeNotOwned,
288 RTI::FederateInternalError)
290 ObjectInstanceMap::iterator i = _objectInstanceMap.find(objectHandle);
291 if (i == _objectInstanceMap.end())
292 throw RTI::ObjectNotKnown("Turn on attributes for unknown object!");
293 if (!i->second.valid())
295 i->second->turnUpdatesOnForObjectInstance(attributes);
298 virtual void turnUpdatesOffForObjectInstance(RTI::ObjectHandle objectHandle, const RTI::AttributeHandleSet& attributes)
299 throw (RTI::ObjectNotKnown,
300 RTI::AttributeNotOwned,
301 RTI::FederateInternalError)
303 ObjectInstanceMap::iterator i = _objectInstanceMap.find(objectHandle);
304 if (i == _objectInstanceMap.end())
305 throw RTI::ObjectNotKnown("Turn off attributes for unknown object!");
306 if (!i->second.valid())
308 i->second->turnUpdatesOffForObjectInstance(attributes);
311 // Ownership Management
312 virtual void requestAttributeOwnershipAssumption(RTI::ObjectHandle objectHandle,
313 const RTI::AttributeHandleSet& attributes, const char* tag)
314 throw (RTI::ObjectNotKnown,
315 RTI::AttributeNotKnown,
316 RTI::AttributeAlreadyOwned,
317 RTI::AttributeNotPublished,
318 RTI::FederateInternalError)
320 ObjectInstanceMap::iterator i = _objectInstanceMap.find(objectHandle);
321 if (i == _objectInstanceMap.end())
322 throw RTI::ObjectNotKnown("requestAttributeOwnershipAssumption for unknown object!");
323 if (!i->second.valid())
325 i->second->requestAttributeOwnershipAssumption(attributes, tagToData(tag));
328 virtual void attributeOwnershipDivestitureNotification(RTI::ObjectHandle objectHandle, const RTI::AttributeHandleSet& attributes)
329 throw (RTI::ObjectNotKnown,
330 RTI::AttributeNotKnown,
331 RTI::AttributeNotOwned,
332 RTI::AttributeDivestitureWasNotRequested,
333 RTI::FederateInternalError)
335 ObjectInstanceMap::iterator i = _objectInstanceMap.find(objectHandle);
336 if (i == _objectInstanceMap.end())
337 throw RTI::ObjectNotKnown("attributeOwnershipDivestitureNotification for unknown object!");
338 if (!i->second.valid())
340 i->second->attributeOwnershipDivestitureNotification(attributes);
343 virtual void attributeOwnershipAcquisitionNotification(RTI::ObjectHandle objectHandle, const RTI::AttributeHandleSet& attributes)
344 throw (RTI::ObjectNotKnown,
345 RTI::AttributeNotKnown,
346 RTI::AttributeAcquisitionWasNotRequested,
347 RTI::AttributeAlreadyOwned,
348 RTI::AttributeNotPublished,
349 RTI::FederateInternalError)
351 ObjectInstanceMap::iterator i = _objectInstanceMap.find(objectHandle);
352 if (i == _objectInstanceMap.end())
353 throw RTI::ObjectNotKnown("attributeOwnershipAcquisitionNotification for unknown object!");
354 if (!i->second.valid())
356 i->second->attributeOwnershipAcquisitionNotification(attributes);
359 virtual void attributeOwnershipUnavailable(RTI::ObjectHandle objectHandle, const RTI::AttributeHandleSet& attributes)
360 throw (RTI::ObjectNotKnown,
361 RTI::AttributeNotKnown,
362 RTI::AttributeAlreadyOwned,
363 RTI::AttributeAcquisitionWasNotRequested,
364 RTI::FederateInternalError)
366 ObjectInstanceMap::iterator i = _objectInstanceMap.find(objectHandle);
367 if (i == _objectInstanceMap.end())
368 throw RTI::ObjectNotKnown("attributeOwnershipUnavailable for unknown object!");
369 if (!i->second.valid())
371 i->second->attributeOwnershipUnavailable(attributes);
374 virtual void requestAttributeOwnershipRelease(RTI::ObjectHandle objectHandle,
375 const RTI::AttributeHandleSet& attributes, const char* tag)
376 throw (RTI::ObjectNotKnown,
377 RTI::AttributeNotKnown,
378 RTI::AttributeNotOwned,
379 RTI::FederateInternalError)
381 ObjectInstanceMap::iterator i = _objectInstanceMap.find(objectHandle);
382 if (i == _objectInstanceMap.end())
383 throw RTI::ObjectNotKnown("requestAttributeOwnershipRelease for unknown object!");
384 if (!i->second.valid())
386 i->second->requestAttributeOwnershipRelease(attributes, tagToData(tag));
389 virtual void confirmAttributeOwnershipAcquisitionCancellation(RTI::ObjectHandle objectHandle, const RTI::AttributeHandleSet& attributes)
390 throw (RTI::ObjectNotKnown,
391 RTI::AttributeNotKnown,
392 RTI::AttributeAlreadyOwned,
393 RTI::AttributeAcquisitionWasNotCanceled,
394 RTI::FederateInternalError)
396 ObjectInstanceMap::iterator i = _objectInstanceMap.find(objectHandle);
397 if (i == _objectInstanceMap.end())
398 throw RTI::ObjectNotKnown("confirmAttributeOwnershipAcquisitionCancellation for unknown object!");
399 if (!i->second.valid())
401 i->second->confirmAttributeOwnershipAcquisitionCancellation(attributes);
404 virtual void informAttributeOwnership(RTI::ObjectHandle objectHandle, RTI::AttributeHandle attributeHandle,
405 RTI::FederateHandle federateHandle)
406 throw (RTI::ObjectNotKnown,
407 RTI::AttributeNotKnown,
408 RTI::FederateInternalError)
410 ObjectInstanceMap::iterator i = _objectInstanceMap.find(objectHandle);
411 if (i == _objectInstanceMap.end())
412 throw RTI::ObjectNotKnown("informAttributeOwnership for unknown object!");
413 if (!i->second.valid())
415 i->second->informAttributeOwnership(attributeHandle, federateHandle);
418 virtual void attributeIsNotOwned(RTI::ObjectHandle objectHandle, RTI::AttributeHandle attributeHandle)
419 throw (RTI::ObjectNotKnown,
420 RTI::AttributeNotKnown,
421 RTI::FederateInternalError)
423 ObjectInstanceMap::iterator i = _objectInstanceMap.find(objectHandle);
424 if (i == _objectInstanceMap.end())
425 throw RTI::ObjectNotKnown("attributeIsNotOwned for unknown object!");
426 if (!i->second.valid())
428 i->second->attributeIsNotOwned(attributeHandle);
431 virtual void attributeOwnedByRTI(RTI::ObjectHandle objectHandle, RTI::AttributeHandle attributeHandle)
432 throw (RTI::ObjectNotKnown,
433 RTI::AttributeNotKnown,
434 RTI::FederateInternalError)
436 ObjectInstanceMap::iterator i = _objectInstanceMap.find(objectHandle);
437 if (i == _objectInstanceMap.end())
438 throw RTI::ObjectNotKnown("attributeOwnedByRTI for unknown object!");
439 if (!i->second.valid())
441 i->second->attributeOwnedByRTI(attributeHandle);
445 virtual void timeRegulationEnabled(const RTI::FedTime& fedTime)
446 throw (RTI::InvalidFederationTime,
447 RTI::EnableTimeRegulationWasNotPending,
448 RTI::FederateInternalError)
450 _timeRegulationEnabled = true;
451 _federateTime = RTI13Ambassador::toTimeStamp(fedTime);
452 SG_LOG(SG_NETWORK, SG_INFO, "RTI: timeRegulationEnabled: " << _federateTime);
455 virtual void timeConstrainedEnabled(const RTI::FedTime& fedTime)
456 throw (RTI::InvalidFederationTime,
457 RTI::EnableTimeConstrainedWasNotPending,
458 RTI::FederateInternalError)
460 _timeConstrainedEnabled = true;
461 _federateTime = RTI13Ambassador::toTimeStamp(fedTime);
462 SG_LOG(SG_NETWORK, SG_INFO, "RTI: timeConstrainedEnabled: " << _federateTime);
465 virtual void timeAdvanceGrant(const RTI::FedTime& fedTime)
466 throw (RTI::InvalidFederationTime,
467 RTI::TimeAdvanceWasNotInProgress,
468 RTI::FederateInternalError)
470 _federateTime = RTI13Ambassador::toTimeStamp(fedTime);
471 _timeAdvancePending = false;
472 SG_LOG(SG_NETWORK, SG_INFO, "RTI: timeAdvanceGrant: " << _federateTime);
475 virtual void requestRetraction(RTI::EventRetractionHandle eventRetractionHandle)
476 throw (RTI::EventNotKnown,
477 RTI::FederateInternalError)
479 // No retraction concept yet
482 // processes the queues that filled up during the past
485 while (!_queueCallbackList.empty()) {
486 (*_queueCallbackList.front())();
487 _queueCallbackList.pop_front();
491 bool getFederationSynchronizationPointAnnounced(const std::string& label)
492 { return _pendingSyncLabels.find(label) != _pendingSyncLabels.end(); }
493 bool getFederationSynchronized(const std::string& label)
495 std::set<std::string>::iterator i = _syncronizedSyncLabels.find(label);
496 if (i == _syncronizedSyncLabels.end())
498 _syncronizedSyncLabels.erase(i);
502 /// Generic callback to execute some notification on objects in a way that they are not prone to
503 /// ConcurrentAccess exceptions.
504 class QueueCallback : public SGReferenced {
506 virtual ~QueueCallback() {}
507 virtual void operator()() = 0;
510 class DiscoverObjectCallback : public QueueCallback {
512 DiscoverObjectCallback(SGSharedPtr<RTIObjectClass> objectClass, SGSharedPtr<RTIObjectInstance> objectInstance, const RTIData& tag) :
513 _objectClass(objectClass),
514 _objectInstance(objectInstance),
517 virtual void operator()()
519 _objectClass->discoverInstance(_objectInstance.get(), _tag);
520 _objectInstance->requestObjectAttributeValueUpdate();
523 SGSharedPtr<RTIObjectClass> _objectClass;
524 SGSharedPtr<RTIObjectInstance> _objectInstance;
527 class RemoveObjectCallback : public QueueCallback {
529 RemoveObjectCallback(SGSharedPtr<RTIObjectInstance> objectInstance, const RTIData& tag) :
530 _objectInstance(objectInstance),
533 virtual void operator()()
535 _objectInstance->removeInstance(_tag);
538 SGSharedPtr<RTIObjectInstance> _objectInstance;
542 // The rtiambassador to issue requests
543 SGSharedPtr<RTI13Ambassador> _rtiAmbassador;
545 // All the sync labels we got an announcement for
546 std::set<std::string> _pendingSyncLabels;
547 std::set<std::string> _syncronizedSyncLabels;
549 // All that calls back into user code is just queued.
550 // That is to make sure we do not call recursively into the RTI
551 typedef std::list<SGSharedPtr<QueueCallback> > QueueCallbackList;
552 QueueCallbackList _queueCallbackList;
554 // Top level information for dispatching federate object attribute updates
555 typedef std::map<RTI::ObjectHandle, SGSharedPtr<RTI13ObjectInstance> > ObjectInstanceMap;
556 // Map of all available objects
557 ObjectInstanceMap _objectInstanceMap;
559 // Top level information for dispatching creation of federate objects
560 typedef std::map<RTI::ObjectClassHandle, SGSharedPtr<RTI13ObjectClass> > ObjectClassMap;
561 ObjectClassMap _objectClassMap;
563 bool _timeRegulationEnabled;
564 bool _timeConstrainedEnabled;
565 bool _timeAdvancePending;
566 SGTimeStamp _federateTime;
569 const RTIData& tagToData(const char* tag)
572 _cachedTag.setData(tag, std::strlen(tag) + 1);
574 _cachedTag.setData("", 1);
580 RTI13Federate::RTI13Federate(const std::list<std::string>& stringList) :
582 _ambassador(new RTI13Ambassador),
583 _federateAmbassador(new FederateAmbassador)
585 _ambassador->_federate = this;
586 _federateAmbassador->_rtiAmbassador = _ambassador;
587 if (stringList.empty()) {
588 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Ignoring non empty connect arguments while connecting to an RTI13 federation!");
592 RTI13Federate::~RTI13Federate()
595 _ambassador->resignFederationExecution();
596 delete _federateAmbassador;
599 RTI13Federate::FederationManagementResult
600 RTI13Federate::createFederationExecution(const std::string& federationName, const std::string& objectModel)
603 _ambassador->createFederationExecution(federationName, objectModel);
604 return FederationManagementSuccess;
605 } catch (RTI::FederationExecutionAlreadyExists& e) {
606 return FederationManagementFail;
607 } catch (RTI::CouldNotOpenFED& e) {
608 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not create federation execution: " << e._name << " " << e._reason);
609 return FederationManagementFatal;
610 } catch (RTI::ErrorReadingFED& e) {
611 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not create federation execution: " << e._name << " " << e._reason);
612 return FederationManagementFatal;
613 } catch (RTI::ConcurrentAccessAttempted& e) {
614 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not create federation execution: " << e._name << " " << e._reason);
615 return FederationManagementFatal;
616 } catch (RTI::RTIinternalError& e) {
617 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not create federation execution: " << e._name << " " << e._reason);
618 return FederationManagementFatal;
622 RTI13Federate::FederationManagementResult
623 RTI13Federate::destroyFederationExecution(const std::string& federation)
626 _ambassador->destroyFederationExecution(federation);
627 return FederationManagementSuccess;
628 } catch (RTI::FederatesCurrentlyJoined& e) {
629 return FederationManagementFail;
630 } catch (RTI::FederationExecutionDoesNotExist& e) {
631 return FederationManagementFail;
632 } catch (RTI::ConcurrentAccessAttempted& e) {
633 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not destroy federation execution: " << e._name << " " << e._reason);
634 return FederationManagementFatal;
635 } catch (RTI::RTIinternalError& e) {
636 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not destroy federation execution: " << e._name << " " << e._reason);
637 return FederationManagementFatal;
641 RTI13Federate::FederationManagementResult
642 RTI13Federate::join(const std::string& federateType, const std::string& federationName)
645 _federateHandle = _ambassador->joinFederationExecution(federateType, federationName, _federateAmbassador);
646 SG_LOG(SG_NETWORK, SG_INFO, "RTI: Joined federation \""
647 << federationName << "\" as \"" << federateType << "\"");
649 return FederationManagementSuccess;
650 } catch (RTI::FederateAlreadyExecutionMember& e) {
651 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not join federation execution: " << e._name << " " << e._reason);
652 return FederationManagementFatal;
653 } catch (RTI::FederationExecutionDoesNotExist& e) {
654 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not join federation execution: " << e._name << " " << e._reason);
655 return FederationManagementFail;
656 } catch (RTI::CouldNotOpenFED& e) {
657 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not join federation execution: " << e._name << " " << e._reason);
658 return FederationManagementFatal;
659 } catch (RTI::ErrorReadingFED& e) {
660 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not join federation execution: " << e._name << " " << e._reason);
661 return FederationManagementFatal;
662 } catch (RTI::ConcurrentAccessAttempted& e) {
663 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not join federation execution: " << e._name << " " << e._reason);
664 return FederationManagementFatal;
665 } catch (RTI::SaveInProgress& e) {
666 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not join federation execution: " << e._name << " " << e._reason);
667 return FederationManagementFatal;
668 } catch (RTI::RestoreInProgress& e) {
669 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not join federation execution: " << e._name << " " << e._reason);
670 return FederationManagementFatal;
671 } catch (RTI::RTIinternalError& e) {
672 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not join federation execution: " << e._name << " " << e._reason);
673 return FederationManagementFatal;
678 RTI13Federate::resign()
681 _ambassador->resignFederationExecution();
682 SG_LOG(SG_NETWORK, SG_INFO, "RTI: Resigned from federation.");
684 _federateHandle = -1;
686 } catch (RTI::FederateOwnsAttributes& e) {
687 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not resign federation execution: " << e._name << " " << e._reason);
689 } catch (RTI::FederateNotExecutionMember& e) {
690 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not resign federation execution: " << e._name << " " << e._reason);
692 } catch (RTI::InvalidResignAction& e) {
693 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not resign federation execution: " << e._name << " " << e._reason);
695 } catch (RTI::ConcurrentAccessAttempted& e) {
696 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not resign federation execution: " << e._name << " " << e._reason);
698 } catch (RTI::RTIinternalError& e) {
699 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not resign federation execution: " << e._name << " " << e._reason);
705 RTI13Federate::getJoined() const
711 RTI13Federate::registerFederationSynchronizationPoint(const std::string& label, const RTIData& tag)
714 _ambassador->registerFederationSynchronizationPoint(label, tag);
715 SG_LOG(SG_NETWORK, SG_INFO, "RTI: registerFederationSynchronizationPoint(" << label << ", tag )");
717 } catch (RTI::FederateNotExecutionMember& e) {
718 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not register federation synchronization point: " << e._name << " " << e._reason);
720 } catch (RTI::ConcurrentAccessAttempted& e) {
721 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not register federation synchronization point: " << e._name << " " << e._reason);
723 } catch (RTI::SaveInProgress& e) {
724 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not register federation synchronization point: " << e._name << " " << e._reason);
726 } catch (RTI::RestoreInProgress& e) {
727 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not register federation synchronization point: " << e._name << " " << e._reason);
729 } catch (RTI::RTIinternalError& e) {
730 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not register federation synchronization point: " << e._name << " " << e._reason);
736 RTI13Federate::getFederationSynchronizationPointAnnounced(const std::string& label)
738 return _federateAmbassador->getFederationSynchronizationPointAnnounced(label);
742 RTI13Federate::synchronizationPointAchieved(const std::string& label)
745 _ambassador->synchronizationPointAchieved(label);
746 SG_LOG(SG_NETWORK, SG_INFO, "RTI: synchronizationPointAchieved(" << label << ")");
748 } catch (RTI::SynchronizationPointLabelWasNotAnnounced& e) {
749 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not signal synchronization point: " << e._name << " " << e._reason);
751 } catch (RTI::FederateNotExecutionMember& e) {
752 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not signal synchronization point: " << e._name << " " << e._reason);
754 } catch (RTI::ConcurrentAccessAttempted& e) {
755 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not signal synchronization point: " << e._name << " " << e._reason);
757 } catch (RTI::SaveInProgress& e) {
758 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not signal synchronization point: " << e._name << " " << e._reason);
760 } catch (RTI::RestoreInProgress& e) {
761 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not signal synchronization point: " << e._name << " " << e._reason);
763 } catch (RTI::RTIinternalError& e) {
764 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not signal synchronization point: " << e._name << " " << e._reason);
770 RTI13Federate::getFederationSynchronized(const std::string& label)
772 return _federateAmbassador->getFederationSynchronized(label);
776 RTI13Federate::enableTimeConstrained()
778 if (!_ambassador.valid()) {
779 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not enable time constrained at unconnected federate.");
783 if (_federateAmbassador->_timeConstrainedEnabled) {
784 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Time constrained is already enabled.");
789 _ambassador->enableTimeConstrained();
790 } catch (RTI::TimeConstrainedAlreadyEnabled& e) {
791 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not enable time constrained: " << e._name << " " << e._reason);
793 } catch (RTI::EnableTimeConstrainedPending& e) {
794 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not enable time constrained: " << e._name << " " << e._reason);
796 } catch (RTI::TimeAdvanceAlreadyInProgress& e) {
797 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not enable time constrained: " << e._name << " " << e._reason);
799 } catch (RTI::ConcurrentAccessAttempted& e) {
800 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not enable time constrained: " << e._name << " " << e._reason);
802 } catch (RTI::FederateNotExecutionMember& e) {
803 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not enable time constrained: " << e._name << " " << e._reason);
805 } catch (RTI::SaveInProgress& e) {
806 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not enable time constrained: " << e._name << " " << e._reason);
808 } catch (RTI::RestoreInProgress& e) {
809 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not enable time constrained: " << e._name << " " << e._reason);
811 } catch (RTI::RTIinternalError& e) {
812 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not enable time constrained: " << e._name << " " << e._reason);
820 RTI13Federate::disableTimeConstrained()
822 if (!_ambassador.valid()) {
823 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not disable time constrained at unconnected federate.");
827 if (!_federateAmbassador->_timeConstrainedEnabled) {
828 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Time constrained is not enabled.");
833 _ambassador->disableTimeConstrained();
834 _federateAmbassador->_timeConstrainedEnabled = false;
835 } catch (RTI::TimeConstrainedWasNotEnabled& e) {
836 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not disable time constrained: " << e._name << " " << e._reason);
838 } catch (RTI::FederateNotExecutionMember& e) {
839 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not disable time constrained: " << e._name << " " << e._reason);
841 } catch (RTI::ConcurrentAccessAttempted& e) {
842 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not disable time constrained: " << e._name << " " << e._reason);
844 } catch (RTI::SaveInProgress& e) {
845 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not disable time constrained: " << e._name << " " << e._reason);
847 } catch (RTI::RestoreInProgress& e) {
848 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not disable time constrained: " << e._name << " " << e._reason);
850 } catch (RTI::RTIinternalError& e) {
851 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not disable time constrained: " << e._name << " " << e._reason);
859 RTI13Federate::getTimeConstrainedEnabled()
861 return _federateAmbassador->_timeConstrainedEnabled;
865 RTI13Federate::enableTimeRegulation(const SGTimeStamp& lookahead)
867 if (!_ambassador.valid()) {
868 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not enable time regulation at unconnected federate.");
872 if (_federateAmbassador->_timeRegulationEnabled) {
873 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Time regulation already enabled.");
878 _ambassador->enableTimeRegulation(lookahead);
879 } catch (RTI::TimeRegulationAlreadyEnabled& e) {
880 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not enable time regulation: " << e._name << " " << e._reason);
882 } catch (RTI::EnableTimeRegulationPending& e) {
883 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not enable time regulation: " << e._name << " " << e._reason);
885 } catch (RTI::TimeAdvanceAlreadyInProgress& e) {
886 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not enable time regulation: " << e._name << " " << e._reason);
888 } catch (RTI::InvalidFederationTime& e) {
889 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not enable time regulation: " << e._name << " " << e._reason);
891 } catch (RTI::InvalidLookahead& e) {
892 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not enable time regulation: " << e._name << " " << e._reason);
894 } catch (RTI::ConcurrentAccessAttempted& e) {
895 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not enable time regulation: " << e._name << " " << e._reason);
897 } catch (RTI::FederateNotExecutionMember& e) {
898 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not enable time regulation: " << e._name << " " << e._reason);
900 } catch (RTI::SaveInProgress& e) {
901 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not enable time regulation: " << e._name << " " << e._reason);
903 } catch (RTI::RestoreInProgress& e) {
904 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not enable time regulation: " << e._name << " " << e._reason);
906 } catch (RTI::RTIinternalError& e) {
907 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not enable time regulation: " << e._name << " " << e._reason);
915 RTI13Federate::disableTimeRegulation()
917 if (!_ambassador.valid()) {
918 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not disable time regulation at unconnected federate.");
922 if (!_federateAmbassador->_timeRegulationEnabled) {
923 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Time regulation is not enabled.");
928 _ambassador->disableTimeRegulation();
929 _federateAmbassador->_timeRegulationEnabled = false;
930 } catch (RTI::TimeRegulationWasNotEnabled& e) {
931 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not disable time regulation: " << e._name << " " << e._reason);
933 } catch (RTI::ConcurrentAccessAttempted& e) {
934 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not disable time regulation: " << e._name << " " << e._reason);
936 } catch (RTI::FederateNotExecutionMember& e) {
937 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not disable time regulation: " << e._name << " " << e._reason);
939 } catch (RTI::SaveInProgress& e) {
940 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not disable time regulation: " << e._name << " " << e._reason);
942 } catch (RTI::RestoreInProgress& e) {
943 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not disable time regulation: " << e._name << " " << e._reason);
945 } catch (RTI::RTIinternalError& e) {
946 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not disable time regulation: " << e._name << " " << e._reason);
954 RTI13Federate::modifyLookahead(const SGTimeStamp& timeStamp)
956 if (!_ambassador.valid()) {
957 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not modify lookahead.");
961 _ambassador->modifyLookahead(timeStamp);
962 } catch (RTI::InvalidLookahead& e) {
963 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not modify lookahead: " << e._name << " " << e._reason);
965 } catch (RTI::FederateNotExecutionMember& e) {
966 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not modify lookahead: " << e._name << " " << e._reason);
968 } catch (RTI::ConcurrentAccessAttempted& e) {
969 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not modify lookahead: " << e._name << " " << e._reason);
971 } catch (RTI::SaveInProgress& e) {
972 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not modify lookahead: " << e._name << " " << e._reason);
974 } catch (RTI::RestoreInProgress& e) {
975 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not modify lookahead: " << e._name << " " << e._reason);
977 } catch (RTI::RTIinternalError& e) {
978 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not modify lookahead: " << e._name << " " << e._reason);
985 RTI13Federate::getTimeRegulationEnabled()
987 return _federateAmbassador->_timeRegulationEnabled;
991 RTI13Federate::timeAdvanceRequest(const SGTimeStamp& timeStamp)
993 if (!_ambassador.valid()) {
994 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not advance time at unconnected federate.");
999 _ambassador->timeAdvanceRequest(timeStamp);
1000 _federateAmbassador->_timeAdvancePending = true;
1001 } catch (RTI::InvalidFederationTime& e) {
1002 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not advance time: " << e._name << " " << e._reason);
1004 } catch (RTI::FederationTimeAlreadyPassed& e) {
1005 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not advance time: " << e._name << " " << e._reason);
1007 } catch (RTI::TimeAdvanceAlreadyInProgress& e) {
1008 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not advance time: " << e._name << " " << e._reason);
1010 } catch (RTI::EnableTimeRegulationPending& e) {
1011 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not advance time: " << e._name << " " << e._reason);
1013 } catch (RTI::EnableTimeConstrainedPending& e) {
1014 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not advance time: " << e._name << " " << e._reason);
1016 } catch (RTI::FederateNotExecutionMember& e) {
1017 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not advance time: " << e._name << " " << e._reason);
1019 } catch (RTI::ConcurrentAccessAttempted& e) {
1020 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not advance time: " << e._name << " " << e._reason);
1022 } catch (RTI::SaveInProgress& e) {
1023 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not advance time: " << e._name << " " << e._reason);
1025 } catch (RTI::RestoreInProgress& e) {
1026 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not advance time: " << e._name << " " << e._reason);
1028 } catch (RTI::RTIinternalError& e) {
1029 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not advance time: " << e._name << " " << e._reason);
1037 RTI13Federate::timeAdvanceRequestAvailable(const SGTimeStamp& timeStamp)
1039 if (!_ambassador.valid()) {
1040 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not advance time at unconnected federate.");
1045 _ambassador->timeAdvanceRequestAvailable(timeStamp);
1046 _federateAmbassador->_timeAdvancePending = true;
1047 } catch (RTI::InvalidFederationTime& e) {
1048 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not advance time: " << e._name << " " << e._reason);
1050 } catch (RTI::FederationTimeAlreadyPassed& e) {
1051 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not advance time: " << e._name << " " << e._reason);
1053 } catch (RTI::TimeAdvanceAlreadyInProgress& e) {
1054 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not advance time: " << e._name << " " << e._reason);
1056 } catch (RTI::EnableTimeRegulationPending& e) {
1057 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not advance time: " << e._name << " " << e._reason);
1059 } catch (RTI::EnableTimeConstrainedPending& e) {
1060 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not advance time: " << e._name << " " << e._reason);
1062 } catch (RTI::FederateNotExecutionMember& e) {
1063 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not advance time: " << e._name << " " << e._reason);
1065 } catch (RTI::ConcurrentAccessAttempted& e) {
1066 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not advance time: " << e._name << " " << e._reason);
1068 } catch (RTI::SaveInProgress& e) {
1069 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not advance time: " << e._name << " " << e._reason);
1071 } catch (RTI::RestoreInProgress& e) {
1072 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not advance time: " << e._name << " " << e._reason);
1074 } catch (RTI::RTIinternalError& e) {
1075 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not advance time: " << e._name << " " << e._reason);
1083 RTI13Federate::flushQueueRequest(const SGTimeStamp& timeStamp)
1085 if (!_ambassador.valid()) {
1086 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not flush queue at unconnected federate.");
1091 _ambassador->flushQueueRequest(timeStamp);
1092 _federateAmbassador->_timeAdvancePending = true;
1093 } catch (RTI::InvalidFederationTime& e) {
1094 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not flush queue: " << e._name << " " << e._reason);
1096 } catch (RTI::FederationTimeAlreadyPassed& e) {
1097 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not flush queue: " << e._name << " " << e._reason);
1099 } catch (RTI::TimeAdvanceAlreadyInProgress& e) {
1100 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not flush queue: " << e._name << " " << e._reason);
1102 } catch (RTI::EnableTimeRegulationPending& e) {
1103 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not flush queue: " << e._name << " " << e._reason);
1105 } catch (RTI::EnableTimeConstrainedPending& e) {
1106 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not flush queue: " << e._name << " " << e._reason);
1108 } catch (RTI::FederateNotExecutionMember& e) {
1109 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not flush queue: " << e._name << " " << e._reason);
1111 } catch (RTI::ConcurrentAccessAttempted& e) {
1112 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not flush queue: " << e._name << " " << e._reason);
1114 } catch (RTI::SaveInProgress& e) {
1115 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not flush queue: " << e._name << " " << e._reason);
1117 } catch (RTI::RestoreInProgress& e) {
1118 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not flush queue: " << e._name << " " << e._reason);
1120 } catch (RTI::RTIinternalError& e) {
1121 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not flush queue: " << e._name << " " << e._reason);
1129 RTI13Federate::getTimeAdvancePending()
1131 return _federateAmbassador->_timeAdvancePending;
1135 RTI13Federate::queryFederateTime(SGTimeStamp& timeStamp)
1137 if (!_ambassador.valid()) {
1138 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not query federate time.");
1143 _ambassador->queryFederateTime(timeStamp);
1144 } catch (RTI::FederateNotExecutionMember& e) {
1145 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not query federate time: " << e._name << " " << e._reason);
1147 } catch (RTI::ConcurrentAccessAttempted& e) {
1148 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not query federate time: " << e._name << " " << e._reason);
1150 } catch (RTI::SaveInProgress& e) {
1151 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not query federate time: " << e._name << " " << e._reason);
1153 } catch (RTI::RestoreInProgress& e) {
1154 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not query federate time: " << e._name << " " << e._reason);
1156 } catch (RTI::RTIinternalError& e) {
1157 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not query federate time: " << e._name << " " << e._reason);
1164 RTI13Federate::queryLookahead(SGTimeStamp& timeStamp)
1166 if (!_ambassador.valid()) {
1167 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not query lookahead.");
1172 _ambassador->queryLookahead(timeStamp);
1173 } catch (RTI::FederateNotExecutionMember& e) {
1174 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not query lookahead: " << e._name << " " << e._reason);
1176 } catch (RTI::ConcurrentAccessAttempted& e) {
1177 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not query lookahead: " << e._name << " " << e._reason);
1179 } catch (RTI::SaveInProgress& e) {
1180 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not query lookahead: " << e._name << " " << e._reason);
1182 } catch (RTI::RestoreInProgress& e) {
1183 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not query lookahead: " << e._name << " " << e._reason);
1185 } catch (RTI::RTIinternalError& e) {
1186 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not query lookahead: " << e._name << " " << e._reason);
1193 RTI13Federate::queryGALT(SGTimeStamp& timeStamp)
1195 if (!_ambassador.valid()) {
1196 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not query GALT.");
1201 return _ambassador->queryGALT(timeStamp);
1202 } catch (RTI::FederateNotExecutionMember& e) {
1203 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not query GALT: " << e._name << " " << e._reason);
1205 } catch (RTI::ConcurrentAccessAttempted& e) {
1206 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not query GALT: " << e._name << " " << e._reason);
1208 } catch (RTI::SaveInProgress& e) {
1209 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not query GALT: " << e._name << " " << e._reason);
1211 } catch (RTI::RestoreInProgress& e) {
1212 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not query GALT: " << e._name << " " << e._reason);
1214 } catch (RTI::RTIinternalError& e) {
1215 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not query GALT: " << e._name << " " << e._reason);
1222 RTI13Federate::queryLITS(SGTimeStamp& timeStamp)
1224 if (!_ambassador.valid()) {
1225 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not query LITS.");
1230 return _ambassador->queryLITS(timeStamp);
1231 } catch (RTI::FederateNotExecutionMember& e) {
1232 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not query LITS: " << e._name << " " << e._reason);
1234 } catch (RTI::ConcurrentAccessAttempted& e) {
1235 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not query LITS: " << e._name << " " << e._reason);
1237 } catch (RTI::SaveInProgress& e) {
1238 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not query LITS: " << e._name << " " << e._reason);
1240 } catch (RTI::RestoreInProgress& e) {
1241 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not query LITS: " << e._name << " " << e._reason);
1243 } catch (RTI::RTIinternalError& e) {
1244 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not query LITS: " << e._name << " " << e._reason);
1251 RTI13Federate::processMessage()
1253 bool result = _ambassador->tick();
1254 _federateAmbassador->processQueues();
1259 RTI13Federate::processMessages(const double& minimum, const double& maximum)
1261 bool result = _ambassador->tick(minimum, 0);
1262 _federateAmbassador->processQueues();
1265 SGTimeStamp timeStamp = SGTimeStamp::now() + SGTimeStamp::fromSec(maximum);
1267 result = _ambassador->tick(0, 0);
1268 _federateAmbassador->processQueues();
1269 } while (result && SGTimeStamp::now() <= timeStamp);
1274 RTI13Federate::createObjectClass(const std::string& objectClassName, HLAObjectClass* hlaObjectClass)
1277 RTI::ObjectClassHandle objectClassHandle;
1278 objectClassHandle = _ambassador->getObjectClassHandle(objectClassName);
1279 if (_federateAmbassador->_objectClassMap.find(objectClassHandle) != _federateAmbassador->_objectClassMap.end()) {
1280 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not create object class, object class already exists!");
1283 RTI13ObjectClass* rtiObjectClass;
1284 rtiObjectClass = new RTI13ObjectClass(hlaObjectClass, objectClassHandle, _ambassador.get());
1285 _federateAmbassador->_objectClassMap[objectClassHandle] = rtiObjectClass;
1286 return rtiObjectClass;
1287 } catch (RTI::NameNotFound& e) {
1288 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not get object class: " << e._name << " " << e._reason);
1290 } catch (RTI::FederateNotExecutionMember& e) {
1291 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not get object class: " << e._name << " " << e._reason);
1293 } catch (RTI::ConcurrentAccessAttempted& e) {
1294 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not get object class: " << e._name << " " << e._reason);
1296 } catch (RTI::RTIinternalError& e) {
1297 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not get object class: " << e._name << " " << e._reason);
1302 RTI13ObjectInstance*
1303 RTI13Federate::getObjectInstance(const std::string& objectInstanceName)
1306 RTI::ObjectHandle objectHandle;
1307 objectHandle = _ambassador->getObjectInstanceHandle(objectInstanceName);
1308 FederateAmbassador::ObjectInstanceMap::iterator i = _federateAmbassador->_objectInstanceMap.find(objectHandle);
1309 if (i == _federateAmbassador->_objectInstanceMap.end()) {
1310 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not get object instance: ObjectInstance not found.");
1314 } catch (RTI::ObjectNotKnown& e) {
1315 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not get object instance: " << e._name << " " << e._reason);
1317 } catch (RTI::FederateNotExecutionMember& e) {
1318 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not get object instance: " << e._name << " " << e._reason);
1320 } catch (RTI::ConcurrentAccessAttempted& e) {
1321 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not get object instance: " << e._name << " " << e._reason);
1323 } catch (RTI::RTIinternalError& e) {
1324 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not get object instance: " << e._name << " " << e._reason);
1330 RTI13Federate::insertObjectInstance(RTI13ObjectInstance* objectInstance)
1332 _federateAmbassador->_objectInstanceMap[objectInstance->getHandle()] = objectInstance;