27 #include <Ice/ObjectAdapter.h>
28 #include <Ice/ValueFactory.h>
38 template class ::IceInternal::Handle<::armarx::ChannelRef>;
48 validationTimeout(4000), waitIntervallMs(10)
56 this->observerProxy = ObserverInterfacePrx::uncheckedCast(observer->
getProxy());
57 this->communicator = observerProxy->ice_getCommunicator();
58 this->observerName = observer->
getName();
59 this->channelName = channelName;
62 initializeDataFields(observer);
66 validationTimeout(4000), waitIntervallMs(10)
73 this->observerProxy = observerPrx;
74 this->observerName = observerPrx->ice_getIdentity().name;
75 this->channelName = channelName;
76 this->communicator = observerProxy->ice_getCommunicator();
79 initializeDataFields();
93 if (std::find(datafieldNames.begin(), datafieldNames.end(), datafieldName) ==
98 if (std::find(datafieldNames.begin(), datafieldNames.end(), datafieldName) ==
118 result = TimedVariantPtr::dynamicCast(
119 observerProxy->getDatafieldByName(
getChannelName(), datafieldName));
126 ObserverInterfacePrx::uncheckedCast(communicator->stringToProxy(observerName));
127 result = TimedVariantPtr::dynamicCast(
128 observerProxy->getDatafieldByName(
getChannelName(), datafieldName));
141 const ObserverInterfacePrx&
149 return observerProxy;
164 const Ice::StringSeq&
167 return datafieldNames;
173 for (
unsigned int i = 0; i < datafieldNames.size(); ++i)
175 if (datafieldName == datafieldNames.at(i))
200 <<
": Initialized as retrieved from proxy : " << initialized;
208 initializeDataFields();
219 cln->initialized = this->initialized;
221 cln->observerName = this->observerName;
222 cln->channelName = this->channelName;
223 cln->datafieldNames = this->datafieldNames;
225 cln->observerProxy = this->observerProxy;
234 s <<
"Reference to channel " << channelName <<
" on observer " << observerName;
248 int validateWaitIntervallMs = waitIntervallMs;
251 IceUtil::Time timeout = IceUtil::Time::milliSeconds(validationTimeout);
255 while (
IceUtil::Time(waitStartTime + timeout - IceUtil::Time::now()).toMilliSeconds() > 0)
262 if (
IceUtil::Time(IceUtil::Time::now() - lastOutput).toSeconds() >=
267 lastOutput = IceUtil::Time::now();
270 usleep(validateWaitIntervallMs * 1000);
272 if (validateWaitIntervallMs <
273 validationTimeout * 0.5f)
275 validateWaitIntervallMs *= 2;
286 ChannelRef::assureProxy()
293 ObserverInterfacePrx::checkedCast(communicator->stringToProxy(observerName));
300 if (observerProxy && !initialized)
302 initializeDataFields();
305 return (observerProxy != 0);
309 ChannelRef::initializeDataFields(Observer* obs)
311 ChannelRegistryEntry channel =
314 DataFieldRegistry::const_iterator iterData = channel.dataFields.begin();
315 datafieldNames.clear();
317 while (iterData != channel.dataFields.end())
319 datafieldNames.push_back(iterData->second.identifier->datafieldName);
323 initialized = channel.initialized;
331 communicator = observerProxy->ice_getCommunicator();
340 obj->setString(
"observerName", observerName);
341 obj->setString(
"channelName", channelName);
349 observerName = obj->getString(
"observerName");
350 channelName = obj->getString(
"channelName");
354 throw LocalException(
355 "The adapter in the Ice::current object must be set to load a ChannelRef from XML");
358 communicator =
c.adapter->getCommunicator();