1 // Copyright (C) 2009 - 2012 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 "RTI13InteractionClass.hxx"
20 #include "RTI13Ambassador.hxx"
24 RTI13InteractionClass::RTI13InteractionClass(HLAInteractionClass* interactionClass, const RTI::InteractionClassHandle& handle, RTI13Ambassador* ambassador) :
25 RTIInteractionClass(interactionClass),
27 _ambassador(ambassador)
31 RTI13InteractionClass::~RTI13InteractionClass()
36 RTI13InteractionClass::resolveParameterIndex(const std::string& name, unsigned index)
38 if (!_ambassador.valid()) {
39 SG_LOG(SG_NETWORK, SG_WARN, "Error: Ambassador is zero.");
43 if (index != _parameterHandleVector.size()) {
44 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Resolving needs to happen in growing index order!");
49 RTI::ParameterHandle parameterHandle = _ambassador->getParameterHandle(name, _handle);
51 ParameterHandleIndexMap::const_iterator i = _parameterHandleIndexMap.find(parameterHandle);
52 if (i != _parameterHandleIndexMap.end()) {
53 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Resolving parameterIndex for parameter \"" << name << "\" twice!");
57 _parameterHandleIndexMap[parameterHandle] = index;
58 _parameterHandleVector.push_back(parameterHandle);
62 } catch (RTI::NameNotFound& e) {
63 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not get interaction class parameter: " << e._name << " " << e._reason);
65 } catch (RTI::FederateNotExecutionMember& e) {
66 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not get interaction class parameter: " << e._name << " " << e._reason);
68 } catch (RTI::ConcurrentAccessAttempted& e) {
69 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not get interaction class parameter: " << e._name << " " << e._reason);
71 } catch (RTI::RTIinternalError& e) {
72 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not get interaction class parameter: " << e._name << " " << e._reason);
75 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not get interaction class parameter.");
83 RTI13InteractionClass::publish()
85 if (!_ambassador.valid()) {
86 SG_LOG(SG_NETWORK, SG_WARN, "Error: Ambassador is zero.");
91 _ambassador->publishInteractionClass(_handle);
93 } catch (RTI::InteractionClassNotDefined& e) {
94 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not publish interaction class: " << e._name << " " << e._reason);
96 } catch (RTI::FederateNotExecutionMember& e) {
97 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not publish interaction class: " << e._name << " " << e._reason);
99 } catch (RTI::ConcurrentAccessAttempted& e) {
100 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not publish interaction class: " << e._name << " " << e._reason);
102 } catch (RTI::SaveInProgress& e) {
103 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not publish interaction class: " << e._name << " " << e._reason);
105 } catch (RTI::RestoreInProgress& e) {
106 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not publish interaction class: " << e._name << " " << e._reason);
108 } catch (RTI::RTIinternalError& e) {
109 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not publish interaction class: " << e._name << " " << e._reason);
112 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not publish interaction class.");
120 RTI13InteractionClass::unpublish()
122 if (!_ambassador.valid()) {
123 SG_LOG(SG_NETWORK, SG_WARN, "Error: Ambassador is zero.");
128 _ambassador->unpublishInteractionClass(_handle);
130 } catch (RTI::InteractionClassNotDefined& e) {
131 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not unpublish interaction class: " << e._name << " " << e._reason);
133 } catch (RTI::InteractionClassNotPublished& e) {
134 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not unpublish interaction class: " << e._name << " " << e._reason);
136 } catch (RTI::FederateNotExecutionMember& e) {
137 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not unpublish interaction class: " << e._name << " " << e._reason);
139 } catch (RTI::ConcurrentAccessAttempted& e) {
140 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not unpublish interaction class: " << e._name << " " << e._reason);
142 } catch (RTI::SaveInProgress& e) {
143 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not unpublish interaction class: " << e._name << " " << e._reason);
145 } catch (RTI::RestoreInProgress& e) {
146 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not unpublish interaction class: " << e._name << " " << e._reason);
148 } catch (RTI::RTIinternalError& e) {
149 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not unpublish interaction class: " << e._name << " " << e._reason);
152 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not unpublish interaction class.");
160 RTI13InteractionClass::subscribe(bool active)
162 if (!_ambassador.valid()) {
163 SG_LOG(SG_NETWORK, SG_WARN, "Error: Ambassador is zero.");
168 _ambassador->subscribeInteractionClass(_handle, active);
170 } catch (RTI::InteractionClassNotDefined& e) {
171 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not subscribe interaction class: " << e._name << " " << e._reason);
173 } catch (RTI::FederateNotExecutionMember& e) {
174 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not subscribe interaction class: " << e._name << " " << e._reason);
176 } catch (RTI::ConcurrentAccessAttempted& e) {
177 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not subscribe interaction class: " << e._name << " " << e._reason);
179 } catch (RTI::FederateLoggingServiceCalls& e) {
180 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not subscribe interaction class: " << e._name << " " << e._reason);
182 } catch (RTI::SaveInProgress& e) {
183 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not subscribe interaction class: " << e._name << " " << e._reason);
185 } catch (RTI::RestoreInProgress& e) {
186 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not subscribe interaction class: " << e._name << " " << e._reason);
188 } catch (RTI::RTIinternalError& e) {
189 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not subscribe interaction class: " << e._name << " " << e._reason);
192 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not subscribe interaction class.");
200 RTI13InteractionClass::unsubscribe()
202 if (!_ambassador.valid()) {
203 SG_LOG(SG_NETWORK, SG_WARN, "Error: Ambassador is zero.");
208 _ambassador->unsubscribeInteractionClass(_handle);
210 } catch (RTI::InteractionClassNotDefined& e) {
211 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not unsubscribe interaction class: " << e._name << " " << e._reason);
213 } catch (RTI::InteractionClassNotSubscribed& e) {
214 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not unsubscribe interaction class: " << e._name << " " << e._reason);
216 } catch (RTI::FederateNotExecutionMember& e) {
217 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not unsubscribe interaction class: " << e._name << " " << e._reason);
219 } catch (RTI::ConcurrentAccessAttempted& e) {
220 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not unsubscribe interaction class: " << e._name << " " << e._reason);
222 } catch (RTI::SaveInProgress& e) {
223 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not unsubscribe interaction class: " << e._name << " " << e._reason);
225 } catch (RTI::RestoreInProgress& e) {
226 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not unsubscribe interaction class: " << e._name << " " << e._reason);
228 } catch (RTI::RTIinternalError& e) {
229 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not unsubscribe interaction class: " << e._name << " " << e._reason);
232 SG_LOG(SG_NETWORK, SG_WARN, "RTI: Could not unsubscribe interaction class.");