28 #include <condition_variable>
33 #include <Ice/ObjectAdapter.h>
34 #include <IceUtil/UUID.h>
36 #include <ArmarXCore/interface/core/util/distributed/RemoteHandle/RemoteHandleControlBlock.h>
38 #include "../../../ArmarXManager.h"
39 #include "../../../services/tasks/PeriodicTask.h"
44 class RemoteHandleControlBlock;
68 std::mutex stateMutex;
71 std::set<RemoteHandleControlBlockPtr> rhs;
72 std::chrono::milliseconds deletionDelay;
104 using clock = std::chrono::steady_clock;
105 inline static int64_t
now();
126 template <
class Deleter>
148 ClientSideRemoteHandleControlBlockBasePtr
150 inline Ice::ObjectPrx
162 forcedDeletion =
true;
167 Ice::ObjectPrx managedObjectPrx,
168 std::function<
void(
void)> deleter);
175 inline void cleanup();
181 std::function<void(
void)> deleter;
182 Ice::ObjectPrx managedObjectProxy;
186 RemoteHandleControlBlockInterfacePrx selfProxy;
188 mutable std::atomic<uint64_t> useCount{0};
189 mutable std::mutex mtx;
190 mutable clock::time_point lastTimeUseCountReachedZero;
191 mutable std::atomic_bool forcedDeletion{
false};
211 return managedObjectProxy;
215 RemoteHandleControlBlock::cleanup()
222 objectAdapter->remove(selfProxy->ice_getIdentity());
225 template <
class Deleter>
226 RemoteHandleControlBlock::ManagementData
228 Ice::ObjectPrx managedObjectPrx,
232 manager->getAdapter(), std::move(managedObjectPrx), std::move(deleter)};
233 auto clientSideRemoteHandleControlBlock = block->getClientSideRemoteHandleControlBlock();
234 manager->getSharedRemoteHandleState()->add(block);
235 return {block, clientSideRemoteHandleControlBlock};