Go to the documentation of this file.
31 #include <ArmarXCore/interface/core/ArmarXManagerInterface.h>
32 #include <ArmarXCore/interface/core/BasicTypes.h>
35 #include <Ice/BuiltinSequences.h>
36 #include <Ice/CommunicatorF.h>
37 #include <Ice/Current.h>
38 #include <Ice/ObjectAdapterF.h>
39 #include <Ice/Properties.h>
40 #include <IceUtil/Handle.h>
42 #include <condition_variable>
52 class ArmarXObjectScheduler;
60 class ArmarXMultipleObjectsScheduler;
97 virtual public ArmarXManagerInterface,
103 enum ArmarXManagerState
123 ArmarXManager(std::string applicationName,
int port = 4061, std::string host =
"localhost", std::string locatorName =
"IceGrid/Locator", Ice::StringSeq args = Ice::StringSeq());
176 void addObject(
const ManagedIceObjectPtr&
object,
bool addWithOwnAdapter =
true,
const std::string& objectName =
"",
bool useOwnScheduleThread =
true)
override;
177 virtual void addObject(
const ManagedIceObjectPtr&
object,
const std::string& objectName,
bool addWithOwnAdapter =
true,
bool useOwnScheduleThread =
true);
261 ManagedIceObjectState
getObjectState(
const std::string& objectName,
const Ice::Current&
c = Ice::emptyCurrent)
override;
271 ManagedIceObjectConnectivity
getObjectConnectivity(
const std::string& objectName,
const Ice::Current&
c = Ice::emptyCurrent)
override;
277 ::armarx::StringStringDictionary
getObjectProperties(const ::std::string& objectName, const ::Ice::Current& = Ice::emptyCurrent)
override;
278 ObjectPropertyInfos
getObjectPropertyInfos(const::std::string& objectName, const::Ice::Current&)
override;
282 Ice::PropertiesAdminPrx
getPropertiesAdmin(
const Ice::Current& = Ice::emptyCurrent)
override;
337 template<
class Function,
class Data>
339 Function f, Data d,
const std::string&
id =
"",
341 IceUtil::Time orphantDeletionDelay = IceUtil::Time::seconds(6),
342 long heartBeatMs = 1000)
347 this,
id, std::forward<decltype(f)>(f), std::forward<decltype(d)>(d),
348 deletionDelay, orphantDeletionDelay, heartBeatMs
350 remoteReferenceCountControlBlockManager->add(ptr);
353 template<
class Function>
355 Function f,
const std::string&
id =
"",
357 IceUtil::Time orphantDeletionDelay = IceUtil::Time::seconds(6),
358 long heartBeatMs = 1000)
363 this,
id, std::forward<decltype(f)>(f),
364 deletionDelay, orphantDeletionDelay, heartBeatMs
366 remoteReferenceCountControlBlockManager->add(ptr);
370 template<
class Function,
class Data>
373 Function f, Data d,
const std::string&
id =
"",
IceUtil::Time deletionDelay = IceUtil::Time::seconds(3))
378 this,
id, std::forward<decltype(f)>(f), std::forward<decltype(d)>(d), deletionDelay
380 remoteReferenceCountControlBlockManager->add(ptr);
383 template<
class Function>
386 Function f,
const std::string&
id =
"",
IceUtil::Time deletionDelay = IceUtil::Time::seconds(3))
391 this,
id, std::forward<decltype(f)>(f), deletionDelay
393 remoteReferenceCountControlBlockManager->add(ptr);
400 bool loadLibFromPath(
const std::string& path,
const Ice::Current& = Ice::emptyCurrent)
override;
401 bool loadLibFromPackage(
const std::string& package,
const std::string& lib,
const Ice::Current& = Ice::emptyCurrent)
override;
404 using ObjectSchedulerMap = std::map<std::string, ArmarXObjectSchedulerPtr>;
405 using ObjectSchedulerList = std::vector<ArmarXObjectSchedulerPtr>;
411 void cleanupSchedulers();
417 void disconnectDependees(
const std::string&
object);
418 void disconnectAllObjects();
419 std::vector<std::string> getDependendees(
const std::string& removedObject);
426 void wakeupWaitingSchedulers();
429 void removeAllObjects(
bool blocking);
436 void checkDependencies();
453 void installProcessFacet();
456 std::string applicationName;
459 ArmarXManagerState managerState;
460 std::mutex managerStateMutex;
468 ObjectSchedulerMap managedObjects;
469 ObjectSchedulerList terminatingObjects;
470 mutable std::recursive_mutex managedObjectsMutex;
471 std::mutex terminatingObjectsMutex;
473 std::mutex schedulerListMutex;
474 std::vector<ArmarXMultipleObjectsSchedulerPtr> singleThreadedSchedulers;
477 std::mutex shutdownMutex;
478 std::condition_variable shutdownCondition;
487 std::shared_ptr<SharedRemoteHandleState> sharedRemoteHandleState;
488 std::shared_ptr<RemoteReferenceCountControlBlockManager> remoteReferenceCountControlBlockManager;
void setComponentIceProperties(const Ice::PropertiesPtr &properties)
Calls Component::setIceProperties() on all components assigend to this ArmarXManager Instance.
IceUtil::Handle< IceManager > IceManagerPtr
IceManager smart pointer.
ObjectPropertyInfos getApplicationPropertyInfos(const ::Ice::Current &) override
virtual void addObjectAsync(const ManagedIceObjectPtr &object, const std::string &objectName, bool addWithOwnAdapter=true, bool useOwnScheduleThread=true)
ObjectPropertyInfos getObjectPropertyInfos(const ::std::string &objectName, const ::Ice::Current &) override
MessageTypeT minimumLoggingLevel
std::map< std::string, VariantBasePtr > StringVariantBaseMap
void waitForShutdown()
Wait for shutdown.
ArmarXManager(std::string applicationName, int port=4061, std::string host="localhost", std::string locatorName="IceGrid/Locator", Ice::StringSeq args=Ice::StringSeq())
ArmarXManager constructor.
This holds the shared state of all RemoteHandleControlBlocks for one armarx manager.
void enableProfiling(bool enable)
Enable or disable profiling of CPU Usage.
const Ice::ObjectAdapterPtr & getAdapter() const
The ArmarXObjectObserver inherits from IceGrid::ObjectObserver and signals its associated ArmarXManag...
SimpleRemoteReferenceCountControlBlockPtr< Function, Data > createSimpleRemoteReferenceCount(Function f, Data d, const std::string &id="", IceUtil::Time deletionDelay=IceUtil::Time::seconds(3))
static bool CheckIceConnection(const Ice::CommunicatorPtr &communicator, bool printHint)
void increaseSchedulers(int increaseBy)
increased the number of single threaded schedulers.
bool isShutdown()
Whether ArmarXManager shutdown has been finished.
SimpleRemoteReferenceCountControlBlockPtr< Function > createSimpleRemoteReferenceCount(Function f, const std::string &id="", IceUtil::Time deletionDelay=IceUtil::Time::seconds(3))
StringVariantBaseMap getMetaInfo(const std::string &, const Ice::Current &) override
bool loadLibFromPath(const std::string &path, const Ice::Current &=Ice::emptyCurrent) override
std::vector< ManagedIceObjectPtr > getManagedObjects() override
Retrieve pointers to all ManagedIceObject.
const std::shared_ptr< SharedRemoteHandleState > & getSharedRemoteHandleState() const
void updateComponentIceProperties(const Ice::PropertyDict &properties)
Ice::PropertiesAdminPrx getPropertiesAdmin(const Ice::Current &=Ice::emptyCurrent) override
void removeObjectNonBlocking(const ManagedIceObjectPtr &object) override
Removes an object from the manager.
void addObject(const ManagedIceObjectPtr &object, bool addWithOwnAdapter=true, const std::string &objectName="", bool useOwnScheduleThread=true) override
Add a ManagedIceObject to the manager.
The registery interface is implemented by ArmarXManagers.
void enableLogging(bool enable)
Enable or disable logging.
bool loadLibFromPackage(const std::string &package, const std::string &lib, const Ice::Current &=Ice::emptyCurrent) override
bool checkIceConnection(bool printHint=true) const
IceUtil::Handle< ArmarXObjectScheduler > ArmarXObjectSchedulerPtr
ManagedIceObjectState getObjectState(const std::string &objectName, const Ice::Current &c=Ice::emptyCurrent) override
Retrieve state of a ManagedIceObject.
armarx::core::time::DateTime Time
::armarx::StringStringDictionary getObjectProperties(const ::std::string &objectName, const ::Ice::Current &=Ice::emptyCurrent) override
getObjectProperties is used to retrieve the properties of an object
Base Class for all Logging classes.
void setDataPaths(std::string dataPaths)
Set data paths used to search for datafiles.
RemoteReferenceCountControlBlockPtr< Function > createRemoteReferenceCount(Function f, const std::string &id="", IceUtil::Time deletionDelay=IceUtil::Time::seconds(3), IceUtil::Time orphantDeletionDelay=IceUtil::Time::seconds(6), long heartBeatMs=1000)
ManagedIceObjectConnectivity getObjectConnectivity(const std::string &objectName, const Ice::Current &c=Ice::emptyCurrent) override
Retrieve connectivity of a ManagedIceObject.
Ice::StringSeq getManagedObjectNames(const Ice::Current &c=Ice::emptyCurrent) override
Retrieve the names of all ManagedIceObject.
void removeObjectBlocking(const ManagedIceObjectPtr &object) override
Removes an object from the manager.
void registerKnownObjectFactoriesWithIce()
non static convenience version of ArmarXManager::RegisterKnownObjectFactoriesWithIce()
RemoteReferenceCountControlBlockPtr< Function, Data > createRemoteReferenceCount(Function f, Data d, const std::string &id="", IceUtil::Time deletionDelay=IceUtil::Time::seconds(3), IceUtil::Time orphantDeletionDelay=IceUtil::Time::seconds(6), long heartBeatMs=1000)
void shutdown()
Shuts down the ArmarXManager.
std::shared_ptr< ScopedRecursiveLock > ScopedRecursiveLockPtr
~ArmarXManager() override
const Ice::CommunicatorPtr & getCommunicator() const
Main class of an ArmarX process.
This file offers overloads of toIce() and fromIce() functions for STL container types.
static void RegisterKnownObjectFactoriesWithIce(const Ice::CommunicatorPtr &ic)
Registers all object factories that are known with Ice.
void asyncShutdown(std::size_t timeoutMs=0)
Calls shutdown() after a timeout.
void setGlobalMinimumLoggingLevel(MessageTypeT minimumLoggingLevel)
Set minimum logging level to output in log stream.
const IceManagerPtr & getIceManager() const
Retrieve the instance of the icemanager.