42#include <Ice/BuiltinSequences.h>
43#include <Ice/Communicator.h>
44#include <Ice/Identity.h>
45#include <Ice/Initialize.h>
46#include <Ice/LocalException.h>
47#include <Ice/Metrics.h>
48#include <Ice/NativePropertiesAdmin.h>
49#include <Ice/ObjectAdapter.h>
50#include <Ice/ObjectF.h>
51#include <Ice/Properties.h>
52#include <Ice/PropertiesF.h>
54#include <Ice/ProxyF.h>
55#include <IceGrid/Admin.h>
56#include <IceGrid/Registry.h>
57#include <IceStorm/IceStorm.h>
58#include <IceUtil/Handle.h>
67#include "ArmarXCore/interface/core/BasicTypes.h"
68#include "ArmarXCore/interface/core/Log.h"
69#include "ArmarXCore/interface/core/ManagedIceObjectDefinitions.h"
70#include "ArmarXCore/interface/core/ThreadingIceBase.h"
96#define MANAGEROBJNAME applicationName + "Manager"
97#define OBJOBSNAME std::string("ArmarXObjectObserver_") + applicationName
105 std::string locatorName,
106 Ice::StringSeq args) :
107 applicationName(applicationName), managerState(eCreated)
110 std::stringstream defaultLocator;
111 defaultLocator <<
"--Ice.Default.Locator=" << locatorName <<
":tcp -p " << port <<
" -h "
113 args.push_back(defaultLocator.str());
117 init(applicationName, communicator);
122 applicationName(applicationName), managerState(eCreated)
125 init(applicationName, communicator);
143 const std::string armarxHint =
"'\nDid you start armarx?\n\nTo start armarx: armarx start\n"
144 "To kill a hanging armarx: armarx killIce";
147 if (communicator->getProperties()->getProperty(
"Ice.Default.Locator").empty())
151 std::cerr <<
"Required Ice property 'Ice.Default.Locator' not set! "
152 <<
"It has to has a value similar to 'IceGrid/Locator:tcp -p 4061 -h "
157 auto locatorProp = communicator->getProperties()->getProperty(
"Ice.Default.Locator");
158 auto pos = locatorProp.find_first_of(
':');
159 std::string locatorId = locatorProp.substr(0, pos);
160 auto proxy = communicator->stringToProxy(locatorId);
161 IceGrid::LocatorPrx::checkedCast(proxy);
167 std::cerr <<
"Could not contact default locator at '"
168 << communicator->getProperties()->getProperty(
"Ice.Default.Locator")
176 std::string registryId =
"IceGrid/Registry";
177 auto proxy = communicator->stringToProxy(registryId);
178 IceGrid::RegistryPrx::checkedCast(proxy);
184 std::cerr <<
"Could not contact IceGrid registry at '"
185 << communicator->getProperties()->getProperty(
186 "IceGrid.Registry.Client.Endpoints")
196 catch (
const Ice::NoEndpointException& e)
198 std::cout <<
"Caught exception: \n" << e.what() << std::endl;
203 <<
"Could not contact TopicManager at '"
205 <<
"IceStorm/TopicManager"
249 bool addWithOwnAdapter,
250 const std::string& objectName,
251 bool useOwnScheduleThread)
256 useOwnScheduleThread);
261 const std::string& objectName,
262 bool addWithOwnAdapter,
263 bool useOwnScheduleThread)
265 addObject(
object, addWithOwnAdapter, objectName, useOwnScheduleThread);
271 const std::string& objectName,
272 bool useOwnScheduleThread)
276 throw LocalException(
"Cannot add NULL object");
279 auto cptr = ComponentPtr::dynamicCast(
object);
280 if (cptr && !cptr->createdByComponentCreate)
282 throw LocalException(
"Components need to be created by Component::create");
286 if (!objectName.empty())
288 if (!object->getName().empty())
290 ARMARX_INFO <<
"Adding object with custom name: " << objectName;
292 object->setName(objectName);
294 if (object->getName().empty())
296 object->setName(object->getDefaultName());
298 if (object->getName().empty())
300 throw LocalException(
"Object name must not be empty");
302 auto lock = acquireManagedObjectsMutex();
308 bool reachable =
false;
312 reachable =
getIceManager()->isObjectReachable(object->getName());
321 throw Ice::AlreadyRegisteredException(
322 __FILE__, __LINE__, object->ice_id(), object->getName());
328 this, iceManager,
object, objectAdapterToAddTo, useOwnScheduleThread);
329 auto pair = managedObjects.insert(
330 std::make_pair(object->getName(), std::move(objectScheduler)));
333 throw Ice::AlreadyRegisteredException(
334 __FILE__, __LINE__, object->ice_id(), object->getName());
336 if (!useOwnScheduleThread)
338 std::scoped_lock lock(schedulerListMutex);
339 singleThreadedSchedulers.at(rand() % singleThreadedSchedulers.size())
340 ->addObjectScheduler(pair.first->second);
351 const std::string& objectName,
352 bool addWithOwnAdapter,
353 bool useOwnScheduleThread)
361 manager->addObject(
object, objectName, addWithOwnAdapter, useOwnScheduleThread);
377 auto lock = acquireManagedObjectsMutex();
382 auto it = managedObjects.find(objectName);
383 if (it == managedObjects.end())
385 ARMARX_WARNING <<
"Cannot remove unknown object '" << objectName <<
"'";
388 scheduler = it->second;
394 removeObject(scheduler,
true);
406 auto removal = [objectName,
this]()
410 auto lock = acquireManagedObjectsMutex();
415 auto it = managedObjects.find(objectName);
416 if (it == managedObjects.end())
418 ARMARX_WARNING <<
"Cannot remove unknown object '" << objectName <<
"'";
421 scheduler = it->second;
425 this->removeObject(scheduler,
false);
432 std::thread{removal}.detach();
454 managerStateMutex.lock();
456 if (managerState == eShutdown)
458 managerStateMutex.unlock();
463 std::unique_lock lock(shutdownMutex);
464 managerStateMutex.unlock();
465 shutdownCondition.wait(lock);
476 std::scoped_lock lock(managerStateMutex);
479 if (managerState >= eShutdownInProgress)
484 managerState = eShutdownInProgress;
487 managedObjectsMutex.lock();
493 cleanupSchedulersTask->stop();
495 if (checkDependencyStatusTask)
497 checkDependencyStatusTask->stop();
500 sharedRemoteHandleState.reset();
501 remoteReferenceCountControlBlockManager.reset();
503 disconnectAllObjects();
509 removeAllObjects(
true);
512 iceManager->getIceGridSession()->getAdmin()->removeObject(
519 singleThreadedSchedulers.clear();
524 iceManager->shutdown();
527 iceManager->waitForShutdown();
533 iceManager->destroy();
536 objObserver =
nullptr;
540 std::scoped_lock lock(managerStateMutex);
544 std::unique_lock lock(shutdownMutex);
546 shutdownCondition.notify_all();
549 managerState = eShutdown;
552 managedObjectsMutex.unlock();
554 catch (std::exception& e)
556 ARMARX_INFO <<
"shutdown failed with exception!\n" << e.what() << std::endl;
559 ARMARX_INFO <<
"Shutdown of ArmarXManager finished!" << std::endl;
565 std::thread{[
this, timeoutMs]
567 std::this_thread::sleep_for(std::chrono::milliseconds{timeoutMs});
576 std::scoped_lock lock(managerStateMutex);
577 return (managerState == eShutdown);
593 return iceManager->getCommunicator();
596 std::vector<ManagedIceObjectPtr>
599 std::vector<ManagedIceObjectPtr>
objects;
601 auto lock = acquireManagedObjectsMutex();
607 ObjectSchedulerMap::iterator iter = managedObjects.begin();
609 while (iter != managedObjects.end())
611 objects.push_back(iter->second->getObject());
626 char hostname[HOST_NAME_MAX];
627 gethostname(hostname, HOST_NAME_MAX);
628 return std::string(hostname);
637 mice::MiceObjectConnectivity
640 mice::MiceObjectConnectivity miceCon = mice::MiceObjectConnectivity();
642 miceCon.subscribedTopics = con.usedTopics;
643 miceCon.publishedTopics = con.offeredTopics;
644 miceCon.usedObjects = Ice::StringSeq();
646 for (
const auto& entry : con.dependencies)
648 miceCon.usedObjects.push_back(entry.first);
654 IceMX::MetricsAdminPrx
657 Ice::ObjectPrx adminObj =
getIceManager()->getCommunicator()->getAdmin();
658 IceMX::MetricsAdminPrx metrAdmin = IceMX::MetricsAdminPrx::checkedCast(adminObj,
"Metrics");
665 ManagedIceObjectState
668 auto lock = acquireManagedObjectsMutex();
671 return eManagedIceObjectExiting;
674 ObjectSchedulerMap::iterator iter = managedObjects.find(objectName);
676 if (iter == managedObjects.end())
678 return eManagedIceObjectExited;
681 ManagedIceObjectState state = (ManagedIceObjectState)iter->second->getObject()->getState();
686 ManagedIceObjectConnectivity
689 auto lock = acquireManagedObjectsMutex();
692 return ManagedIceObjectConnectivity();
695 ObjectSchedulerMap::iterator iter = managedObjects.find(objectName);
697 if (iter == managedObjects.end())
699 return ManagedIceObjectConnectivity();
702 ManagedIceObjectConnectivity con = iter->second->getObject()->getConnectivity();
708 StringStringDictionary
711 StringStringDictionary propertyMap;
712 ObjectSchedulerMap::iterator iter = managedObjects.find(objectName);
714 if (iter == managedObjects.end())
726 auto result =
component->getPropertyDefinitions()->getPropertyValues(
727 component->getPropertyDefinitions()->getPrefix());
734 ObjectPropertyInfos propertyMap;
735 ObjectSchedulerMap::iterator iter = managedObjects.find(objectName);
737 if (iter == managedObjects.end())
750 for (
auto prop :
component->getPropertyDefinitions()->getPropertyValues())
752 propertyMap[
component->getPropertyDefinitions()->getPrefix() + prop.first] = {
753 component->getPropertyDefinitions()->getDefinitionBase(prop.first)->isConstant(),
762 ObjectPropertyInfos propertyMap;
771 ->getPropertyDefinitions()
772 ->getDefinitionBase(prop.first)
779 Ice::PropertiesAdminPrx
782 Ice::ObjectPrx adminObj =
getIceManager()->getCommunicator()->getAdmin();
783 Ice::PropertiesAdminPrx propAdmin =
784 Ice::PropertiesAdminPrx::checkedCast(adminObj,
"Properties");
809 component->updateIceProperties(properties);
817 Ice::StringSeq objectNames;
819 auto lock = acquireManagedObjectsMutex();
825 ObjectSchedulerMap::iterator iter = managedObjects.begin();
827 while (iter != managedObjects.end())
829 objectNames.push_back(iter->first);
845 updated(
const Ice::PropertyDict& changes)
override
850 application->updateIceProperties(changes);
875 appInstance ? appInstance->getProperty<std::string>(
"TopicSuffix").getValue() :
"");
880 throw Ice::ConnectFailedException(__FILE__, __LINE__);
883 this->installProcessFacet();
894 auto icegrid = iceManager->getIceGridSession();
898 Ice::ObjectPrx oPrx =
899 icegrid->registerObjectWithNewAdapter(objObserver,
OBJOBSNAME, observerAdapter);
900 IceGrid::ObjectObserverPrx objObsPrx = IceGrid::ObjectObserverPrx::checkedCast(oPrx);
901 icegrid->setObjectObserver(objObsPrx);
904 icegrid->registerObjectWithNewAdapter(
this,
MANAGEROBJNAME, armarxManagerAdapter);
909 &ArmarXManager::cleanupSchedulers,
912 "ArmarXManager::cleanupSchedulers");
913 cleanupSchedulersTask->start();
915 checkDependencyStatusTask =
917 &ArmarXManager::checkDependencies,
920 "ArmarXManager::DependenciesChecker");
921 checkDependencyStatusTask->start();
926 std::scoped_lock lock(managerStateMutex);
927 managerState = eRunning;
943 if (appInstance && appInstance->getProperty<
bool>(
"UseTimeServer").getValue())
947 applicationName +
"LocalTimeServer");
958 ? appInstance->getProperty<
unsigned int>(
"RemoteHandlesDeletionTimeout").getValue()
960 remoteReferenceCountControlBlockManager.reset(
965 ArmarXManager::cleanupSchedulers()
967 std::scoped_lock lock(terminatingObjectsMutex);
969 ObjectSchedulerList::iterator iter = terminatingObjects.begin();
971 while (iter != terminatingObjects.end())
975 <<
"Checking termination state of " << sched->getObject()->getName()
979 if ((*iter)->isTerminated())
982 << (*iter)->getObject()->getName() <<
" finished";
983 iter = terminatingObjects.erase(iter);
993 ArmarXManager::disconnectDependees(
const std::string&
object)
997 std::vector<std::string> dependees = getDependendees(
object);
999 auto lock = acquireManagedObjectsMutex();
1005 for (
const auto& dependee : dependees)
1007 ArmarXManager::ObjectSchedulerMap::iterator it = managedObjects.find(dependee);
1009 <<
"' disconnected because of '" <<
object <<
"'";
1011 if (it != managedObjects.end())
1013 it->second->disconnected(
true);
1024 ArmarXManager::disconnectAllObjects()
1026 auto lock = acquireManagedObjectsMutex();
1031 ObjectSchedulerMap::iterator iter = managedObjects.begin();
1033 for (; iter != managedObjects.end(); iter++)
1035 iter->second->disconnected(
false);
1039 std::vector<std::string>
1040 ArmarXManager::getDependendees(
const std::string& removedObject)
1042 std::vector<std::string> result;
1044 auto lock = acquireManagedObjectsMutex();
1053 ObjectSchedulerMap::const_iterator it = managedObjects.begin();
1055 for (; it != managedObjects.end(); it++)
1059 if (scheduler->dependsOn(removedObject))
1061 result.push_back(it->first);
1074 ArmarXManager::wakeupWaitingSchedulers()
1076 auto lock = acquireManagedObjectsMutex();
1085 ObjectSchedulerMap::const_iterator it = managedObjects.begin();
1087 for (; it != managedObjects.end(); it++)
1090 scheduler->wakeupDependencyCheck();
1100 ArmarXManager::removeAllObjects(
bool blocking)
1102 ObjectSchedulerMap tempMap;
1104 std::scoped_lock lock(managedObjectsMutex);
1105 tempMap = managedObjects;
1108 for (
auto& it : tempMap)
1110 removeObject(it.second,
false);
1115 for (
auto objectScheduler : terminatingObjects)
1117 objectScheduler->waitForTermination();
1120 terminatingObjects.clear();
1127 if (!objectScheduler)
1132 const std::string objName = objectScheduler->getObject()->getName();
1136 iceManager->removeObject(objName);
1138 std::scoped_lock lock2(managedObjectsMutex);
1139 managedObjects.erase(objectScheduler->getObject()->getName());
1142 objectScheduler->terminate();
1146 objectScheduler->waitForTermination();
1147 ARMARX_VERBOSE <<
"Blocking removal of ManagedIceObject " << objName <<
" finished";
1151 ARMARX_VERBOSE <<
"Inserting ManagedIceObject into delayed removal list: "
1153 std::scoped_lock lockTerm(terminatingObjectsMutex);
1154 terminatingObjects.push_back(objectScheduler);
1161 ARMARX_ERROR <<
"Removing of object '" << objName <<
"' failed with an exception!\n"
1197 ArmarXManager::findObjectScheduler(
const std::string& objectName)
const
1199 std::scoped_lock lock(managedObjectsMutex);
1200 auto it = managedObjects.find(objectName);
1201 if (it != managedObjects.end())
1212 ArmarXManager::checkDependencies()
1216 auto lock = acquireManagedObjectsMutex();
1224 ObjectSchedulerMap::const_iterator it = managedObjects.begin();
1226 for (; it != managedObjects.end(); it++)
1230 if (scheduler->getObjectState() == eManagedIceObjectStarted &&
1231 !scheduler->checkDependenciesStatus())
1233 scheduler->disconnected(
true);
1247 std::scoped_lock lock(managerStateMutex);
1249 if (managerState >= eShutdownInProgress)
1256 new std::scoped_lock<std::recursive_mutex>(managedObjectsMutex));
1262 ArmarXManager::installProcessFacet()
1268 if (applicationCommunicator->findAdminFacet(
"Process"))
1270 applicationCommunicator->removeAdminFacet(
"Process");
1273 Ice::ProcessPtr applicationProcessFacet =
new ApplicationProcessFacet(*
this);
1274 applicationCommunicator->addAdminFacet(applicationProcessFacet,
"Process");
1277 new IcePropertyChangeCallback(appInstance);
1279 Ice::ObjectPtr obj = applicationCommunicator->findAdminFacet(
"Properties");
1280 Ice::NativePropertiesAdminPtr admin = Ice::NativePropertiesAdminPtr::dynamicCast(obj);
1283 admin->addUpdateCallback(propertyChangeCallback);
1288 <<
"Could not get properties admin - online property changing will not work";
1292 applicationCommunicator->getAdmin();
1306 for (
const auto& id2factory : preregistration->getFactories())
1308 if (!ic->getValueFactoryManager()->find(id2factory.first))
1311 ic->getValueFactoryManager()->add(id2factory.second, id2factory.first);
1326 return armarxManagerAdapter;
1329 const std::shared_ptr<SharedRemoteHandleState>&
1332 return sharedRemoteHandleState;
1338 std::scoped_lock lock(schedulerListMutex);
1339 for (
int i = 0; i < increaseBy; ++i)
1349 static std::map<std::string, DynamicLibraryPtr> loadedLibs;
1350 static std::mutex libsMutex;
1351 std::lock_guard<std::mutex> guard{libsMutex};
1352 if (loadedLibs.count(path))
1367 if (lib->isLibraryLoaded())
1370 loadedLibs[path] = lib;
1374 ARMARX_ERROR <<
"Could not load lib " + path +
": " + lib->getErrorMessage();
1425 std::scoped_lock lock(managedObjectsMutex);
1426 StringStringDictionary propertyMap;
1427 ObjectSchedulerMap::iterator iter = managedObjects.find(objectName);
1429 if (iter == managedObjects.end())
1434 return iter->second->getObject()->getMetaInfoMap();
static ApplicationPtr getInstance()
Retrieve shared pointer to the application object.
static void initDataPaths(const std::string &dataPathList)
const Ice::ObjectAdapterPtr & getAdapter() const
Ice::StringSeq getObjectNames(const Ice::Current &c=Ice::emptyCurrent) override
Retrieve the names of all ManagedIceObject.
void setGlobalMinimumLoggingLevel(MessageTypeT minimumLoggingLevel)
Set minimum logging level to output in log stream.
void enableProfiling(bool enable)
Enable or disable profiling of CPU Usage.
mice::MiceObjectConnectivity getMiceObjectConnectivity(const std::string &objectName, const Ice::Current &c=Ice::emptyCurrent) override
Retrieve connectivity of a ManagedIceObject.
const std::shared_ptr< SharedRemoteHandleState > & getSharedRemoteHandleState() const
ArmarXManager(std::string applicationName, int port=4061, std::string host="localhost", std::string locatorName="IceGrid/Locator", Ice::StringSeq args=Ice::StringSeq())
ArmarXManager constructor.
Ice::PropertiesAdminPrx getPropertiesAdmin(const Ice::Current &=Ice::emptyCurrent) override
void updateComponentIceProperties(const Ice::PropertyDict &properties)
const IceManagerPtr & getIceManager() const
Retrieve the instance of the icemanager.
friend class PeriodicTask< ArmarXManager >
ManagedIceObjectConnectivity getObjectConnectivity(const std::string &objectName, const Ice::Current &c=Ice::emptyCurrent) override
Retrieve connectivity of a ManagedIceObject.
IceMX::MetricsAdminPrx getMetricsAdmin(const Ice::Current &=Ice::emptyCurrent) override
void waitForShutdown()
Wait for shutdown.
virtual void addObjectAsync(const ManagedIceObjectPtr &object, const std::string &objectName, bool addWithOwnAdapter=true, bool useOwnScheduleThread=true)
void addObject(const ManagedIceObjectPtr &object, bool addWithOwnAdapter=true, const std::string &objectName="", bool useOwnScheduleThread=true) override
Add a ManagedIceObject to the manager.
::armarx::StringStringDictionary getObjectProperties(const ::std::string &objectName, const ::Ice::Current &=Ice::emptyCurrent) override
getObjectProperties is used to retrieve the properties of an object
const Ice::CommunicatorPtr & getCommunicator() const
static bool CheckIceConnection(const Ice::CommunicatorPtr &communicator, bool printHint)
void shutdown()
Shuts down the ArmarXManager.
void increaseSchedulers(int increaseBy)
increased the number of single threaded schedulers.
std::string getHostname(const Ice::Current &c=Ice::emptyCurrent) override
Gets the hostname of the host running the manager.
static void RegisterKnownObjectFactoriesWithIce(const Ice::CommunicatorPtr &ic)
Registers all object factories that are known with Ice.
void removeObjectBlocking(const ManagedIceObjectPtr &object) override
Removes an object from the manager.
void setDataPaths(std::string dataPaths)
Set data paths used to search for datafiles.
void asyncShutdown(std::size_t timeoutMs=0)
Calls shutdown() after a timeout.
StringVariantBaseMap getMetaInfo(const std::string &, const Ice::Current &) override
std::vector< ManagedIceObjectPtr > getManagedObjects() override
Retrieve pointers to all ManagedIceObject.
bool checkIceConnection(bool printHint=true) const
bool isShutdown()
Whether ArmarXManager shutdown has been finished.
void enableLogging(bool enable)
Enable or disable logging.
Ice::StringSeq getManagedObjectNames(const Ice::Current &c=Ice::emptyCurrent) override
Retrieve the names of all ManagedIceObject.
ManagedIceObjectState getObjectState(const std::string &objectName, const Ice::Current &c=Ice::emptyCurrent) override
Retrieve state of a ManagedIceObject.
ObjectPropertyInfos getObjectPropertyInfos(const ::std::string &objectName, const ::Ice::Current &) override
void removeObjectNonBlocking(const ManagedIceObjectPtr &object) override
Removes an object from the manager.
~ArmarXManager() override
ObjectPropertyInfos getApplicationPropertyInfos(const ::Ice::Current &) override
void registerKnownObjectFactoriesWithIce()
non static convenience version of ArmarXManager::RegisterKnownObjectFactoriesWithIce()
void setComponentIceProperties(const Ice::PropertiesPtr &properties)
Calls Component::setIceProperties() on all components assigend to this ArmarXManager Instance.
friend class ArmarXObjectObserver
Takes care of the lifecycle management of ManagedIceObjects.
The DynamicLibrary class provides a mechanism to load libraries at runtime.
static std::vector< FactoryCollectionBasePtr > & PreregistrationList()
The IceManager class provides simplified access to commonly used Ice features.
static IceStorm::TopicManagerPrx GetTopicManager(Ice::CommunicatorPtr communicator)
IcePropertyChangeCallback(armarx::ApplicationPtr application)
void updated(const Ice::PropertyDict &changes) override
static LocalTimeServerPtr getApplicationTimeServer()
Get the applications LocalTimeServer instance.
static void SetGlobalMinimumLoggingLevel(MessageTypeT level)
With setGlobalMinimumLoggingLevel the minimum verbosity-level of log-messages can be set for the whol...
static void SetSendLoggingActivated(bool activated=true)
static void setProxy(const std::string &componentName, LogPrx logProxy)
static void SetLoggingActivated(bool activated=true, bool showMessage=true)
setLoggingActivated() is used to activate or disable the logging facilities in the whole application
SpamFilterDataPtr deactivateSpam(float deactivationDurationSec=10.0f, const std::string &identifier="", bool deactivate=true) const
disables the logging for the current line for the given amount of seconds.
MessageTypeT minimumLoggingLevel
void setTag(const LogTag &tag)
static std::string GetObjectStateAsString(int state)
static ThreadListPtr getApplicationThreadList()
getApplicationThreadList retrieves the ThreadList, that contains all TimerTasks and PeriodicTasks in ...
static void SetTimeServer(LocalTimeServerPtr ts)
#define ARMARX_CHECK_EXPRESSION(expression)
This macro evaluates the expression and if it turns out to be false it will throw an ExpressionExcept...
#define ARMARX_INFO
The normal logging level.
#define ARMARX_ERROR
The logging level for unexpected behaviour, that must be fixed.
#define ARMARX_WARNING
The logging level for unexpected behaviour, but not a serious problem.
#define ARMARX_VERBOSE
The logging level for verbose information.
std::shared_ptr< ScopedRecursiveLock > ScopedRecursiveLockPtr
::IceInternal::Handle<::Ice::Properties > PropertiesPtr
::IceInternal::Handle<::Ice::Communicator > CommunicatorPtr
::IceInternal::Handle<::Ice::ObjectAdapter > ObjectAdapterPtr
This file offers overloads of toIce() and fromIce() functions for STL container types.
::IceInternal::ProxyHandle<::IceProxy::armarx::Log > LogPrx
IceUtil::Handle< ArmarXManager > ArmarXManagerPtr
std::mutex & FactoryCollectionBase_RegistrationListMutex()
std::map< std::string, VariantBasePtr > StringVariantBaseMap
IceUtil::Handle< ArmarXObjectScheduler > ArmarXObjectSchedulerPtr
std::string GetHandledExceptionString()
bool LoadLibFromAbsolutePath(const std::string &path)
IceUtil::Handle< Application > ApplicationPtr
IceUtil::Handle< FactoryCollectionBase > FactoryCollectionBasePtr
IceUtil::Handle< IcePropertyChangeCallback > IcePropertyChangeCallbackPtr
IceUtil::Handle< IceManager > IceManagerPtr
IceManager smart pointer.
IceInternal::Handle< Component > ComponentPtr
Component smart pointer type.
IceInternal::Handle< ManagedIceObject > ManagedIceObjectPtr
std::shared_ptr< DynamicLibrary > DynamicLibraryPtr
This holds the shared state of all RemoteHandleControlBlocks for one armarx manager.
static const unsigned int DEFAULT_DELETION_DELAY
The amount of time (in ms) required to pass after a RemoteHandleControlBlock's usecount has reacht ze...