35#include <IceUtil/UUID.h>
37#include <ArmarXCore/interface/core/RemoteReferenceCount.h>
58 countingActivated_ =
true;
64 return countingActivated_;
70 return countReachedZero_;
80 const std::string&
id);
85 friend class ::armarx::RemoteReferenceCountControlBlockManager;
103 const std::string
id;
106 std::atomic_bool countingActivated_{
false};
107 std::atomic_bool countReachedZero_{
false};
118 virtual public RemoteReferenceCountControlBlockInterface,
125 void heartbeat(
const std::string& counterId,
126 const Ice::Current& = Ice::emptyCurrent)
final override;
128 const Ice::Current& = Ice::emptyCurrent)
final override;
130 const Ice::Current& = Ice::emptyCurrent)
final override;
134 const std::string&
id,
135 IceUtil::Time deletionDelay,
136 IceUtil::Time orphantDeletionDelay,
140 IceUtil::Time nextCheckTimePoint() final override;
143 const
IceUtil::Time deletionDelay;
144 const
IceUtil::Time orphantDeletionDelay;
145 const
long heartBeatMs;
153 virtual public SimpleRemoteReferenceCountControlBlockInterface,
160 void addCounter(
const std::string& counterId,
const Ice::Current&)
final override;
161 void removeCounter(
const std::string& counterId,
const Ice::Current&)
final override;
165 const std::string&
id,
166 IceUtil::Time deletionDelay);
169 IceUtil::Time nextCheckTimePoint() final override;
171 std::set<
std::
string> counterIds;
172 const
IceUtil::Time deletionDelay;
179 template <
class FunctionType = std::function<
void(
void)>,
class DataType =
void>
180 class RemoteReferenceCountControlBlock :
183 RemoteReferenceCountControlBlock(
const ArmarXManagerPtr& manager,
184 const std::string&
id,
187 IceUtil::Time deletionDelay,
188 IceUtil::Time orphantDeletionDelay,
194 orphantDeletionDelay,
197 function{std::move(f)}
202 FunctionType function;
205 onCountReachedZero()
final override
213 template <
class FunctionType>
214 class RemoteReferenceCountControlBlock<FunctionType, void> :
217 RemoteReferenceCountControlBlock(
const ArmarXManagerPtr& manager,
218 const std::string&
id,
220 IceUtil::Time deletionDelay,
221 IceUtil::Time orphantDeletionDelay,
227 orphantDeletionDelay,
229 function{std::move(f)}
233 FunctionType function;
236 onCountReachedZero()
final override
244 template <
class FunctionType,
class DataType =
void>
252 template <
class FunctionType = std::function<
void(
void)>,
class DataType =
void>
253 class SimpleRemoteReferenceCountControlBlock :
256 SimpleRemoteReferenceCountControlBlock(
const ArmarXManagerPtr& manager,
257 const std::string&
id,
260 IceUtil::Time deletionDelay) :
264 function{std::move(f)}
269 FunctionType function;
272 onCountReachedZero()
final override
280 template <
class FunctionType>
281 class SimpleRemoteReferenceCountControlBlock<FunctionType, void> :
284 SimpleRemoteReferenceCountControlBlock(
const ArmarXManagerPtr& manager,
285 const std::string&
id,
287 IceUtil::Time deletionDelay) :
290 function{std::move(f)}
294 FunctionType function;
297 onCountReachedZero()
final override
305 template <
class FunctionType,
class DataType =
void>
334 const IceUtil::Time period;
335 using PqEntry = std::pair<IceUtil::Time,
338 struct PqEntryCompare
341 operator()(
const PqEntry& lhs,
const PqEntry& rhs)
const
343 return std::make_pair(lhs.first, lhs.second.get()) >
344 std::make_pair(rhs.first, rhs.second.get());
352 const detail::RemoteReferenceCountControlBlockManagementInterfacePtr& lhs,
353 const detail::RemoteReferenceCountControlBlockManagementInterfacePtr& rhs)
const
355 return lhs.get() < rhs.get();
359 std::mutex stateMutex;
360 std::set<detail::RemoteReferenceCountControlBlockManagementInterfacePtr, RRCBMIPtr>
361 pendingForActivation;
362 std::priority_queue<PqEntry, std::vector<PqEntry>, PqEntryCompare> rrccbs;
364 std::atomic_bool shutdown{
false};
Main class of an ArmarX process.
static const Ice::Long DefaultOrphantDeletionDelayMs
static const Ice::Long DefaultDeletionDelayMs
RemoteReferenceCountControlBlockManager(IceUtil::Time period)
~RemoteReferenceCountControlBlockManager()
void add(detail::RemoteReferenceCountControlBlockManagementInterfacePtr ptr)
friend class ArmarXManager
friend class ArmarXManager
friend class ArmarXManager
friend class ArmarXManager
AbstractRemoteReferenceCountControlBlock(const ArmarXManagerPtr &manager, const std::string &id, IceUtil::Time deletionDelay, IceUtil::Time orphantDeletionDelay, long heartBeatMs)
IceUtil::Handle< ArmarXManager > ArmarXManagerPtr
RemoteReferenceCounterBasePtr getReferenceCounter()
void heartbeat(const std::string &counterId, const Ice::Current &=Ice::emptyCurrent) final override
void removeCounter(const std::string &counterId, const Ice::Current &=Ice::emptyCurrent) final override
void addCounter(const std::string &counterId, const Ice::Current &=Ice::emptyCurrent) final override
void addCounter(const std::string &counterId, const Ice::Current &) final override
void removeCounter(const std::string &counterId, const Ice::Current &) final override
SimpleRemoteReferenceCounterBasePtr getReferenceCounter()
IceUtil::Handle< ArmarXManager > ArmarXManagerPtr
AbstractSimpleRemoteReferenceCountControlBlock(const ArmarXManagerPtr &manager, const std::string &id, IceUtil::Time deletionDelay)
Ice::ObjectPrx getProxy() const
IceUtil::Time lastTimeReachedZero
virtual void onCountReachedZero()=0
~RemoteReferenceCountControlBlockManagementInterface() override
bool hasCountReachedZero() const
IceUtil::Handle< ArmarXManager > ArmarXManagerPtr
bool isCountingActivated() const
ArmarXManagerPtr armarXManager
RemoteReferenceCountControlBlockManagementInterface(const ArmarXManagerPtr &manager, const std::string &id)
virtual IceUtil::Time nextCheckTimePoint()=0
Returns the next timepoint when this ControlBlock should be checked.
IceUtil::Handle< detail::RemoteReferenceCountControlBlockManagementInterface > RemoteReferenceCountControlBlockManagementInterfacePtr
This file offers overloads of toIce() and fromIce() functions for STL container types.
IceUtil::Handle< ArmarXManager > ArmarXManagerPtr
IceUtil::Handle< RemoteReferenceCountControlBlock< FunctionType, DataType > > RemoteReferenceCountControlBlockPtr
IceUtil::Handle< SimpleRemoteReferenceCountControlBlock< FunctionType, DataType > > SimpleRemoteReferenceCountControlBlockPtr