18 #ifndef INCLUDE_RCF_SERVEROBJECTSERVICE_HPP 19 #define INCLUDE_RCF_SERVEROBJECTSERVICE_HPP 21 #include <RCF/Any.hpp> 22 #include <RCF/Export.hpp> 23 #include <RCF/PeriodicTimer.hpp> 24 #include <RCF/Service.hpp> 25 #include <RCF/Tools.hpp> 30 class ServerObjectService;
31 typedef std::shared_ptr<ServerObjectService> ServerObjectServicePtr;
33 class RCF_EXPORT ServerObjectHolder
39 ServerObjectHolder(
const Any & serverObject, std::uint32_t timeoutMs);
41 std::uint32_t mTimeoutMs;
42 std::uint32_t mLastTouchMs;
47 class RCF_EXPORT ServerObjectService :
public I_Service, Noncopyable
50 ServerObjectService();
53 void onServerStart(RcfServer & server);
54 void onServerStop(RcfServer & server);
56 void customDeleter(
const std::string & objectKey,
void * pt);
58 typedef std::map<std::string, ServerObjectHolder> ServerObjectMap;
60 RcfServer * mpRcfServer;
61 PeriodicTimer mPeriodicTimer;
63 std::uint32_t mHarvestingIntervalS;
64 std::uint32_t mLastHarvestMs;
67 ServerObjectMap mServerObjectMap;
72 std::shared_ptr<T> getServerObjectImpl(
73 const std::string & objectKey,
74 std::uint32_t timeoutMs,
75 bool createIfDoesntExist)
77 typedef std::shared_ptr<T> TPtr;
81 ServerObjectMap::iterator iter = mServerObjectMap.find(objectKey);
82 if (iter != mServerObjectMap.end())
84 ServerObjectHolder & holder = iter->second;
85 Any & a = holder.mServerObject;
86 TPtr & tPtr = a.get<TPtr>();
91 holder.mLastTouchMs = getCurrentTimeMs();
92 RCF_ASSERT(holder.mUseCount >= 0);
94 TPtr ptr(pt, std::bind(&ServerObjectService::customDeleter,
this, objectKey, std::placeholders::_1));
97 else if (createIfDoesntExist)
101 mServerObjectMap[objectKey] = ServerObjectHolder(Any(tPtr), timeoutMs);
102 ServerObjectHolder & holder = mServerObjectMap[objectKey];
105 holder.mLastTouchMs = getCurrentTimeMs();
106 RCF_ASSERT(holder.mUseCount >= 0);
108 TPtr ptr(pt, std::bind(&ServerObjectService::customDeleter,
this, objectKey, std::placeholders::_1));
120 std::shared_ptr<T> queryServerObject(
121 const std::string & objectKey)
123 return getServerObjectImpl<T>(objectKey, 0,
false);
127 std::shared_ptr<T> getServerObject(
128 const std::string & objectKey,
129 std::uint32_t timeoutMs)
131 return getServerObjectImpl<T>(objectKey, timeoutMs,
true);
134 void deleteServerObject(
const std::string & objectKey);
139 #endif // ! INCLUDE_RCF_SERVEROBJECTSERVICE_HPP Definition: AmiIoHandler.hpp:23