19 #ifndef INCLUDE_RCF_SERVEROBJECTSERVICE_HPP 20 #define INCLUDE_RCF_SERVEROBJECTSERVICE_HPP 22 #include <RCF/Any.hpp> 23 #include <RCF/Export.hpp> 24 #include <RCF/PeriodicTimer.hpp> 25 #include <RCF/Service.hpp> 26 #include <RCF/Tools.hpp> 31 class ServerObjectService;
32 typedef std::shared_ptr<ServerObjectService> ServerObjectServicePtr;
34 class RCF_EXPORT ServerObjectHolder
40 ServerObjectHolder(
const Any & serverObject, std::uint32_t timeoutMs);
42 std::uint32_t mTimeoutMs;
43 std::uint32_t mLastTouchMs;
48 class RCF_EXPORT ServerObjectService :
public I_Service, Noncopyable
51 ServerObjectService();
54 void onServerStart(RcfServer & server);
55 void onServerStop(RcfServer & server);
57 void customDeleter(
const std::string & objectKey,
void * pt);
59 typedef std::map<std::string, ServerObjectHolder> ServerObjectMap;
61 RcfServer * mpRcfServer;
62 PeriodicTimer mPeriodicTimer;
64 std::uint32_t mHarvestingIntervalS;
65 std::uint32_t mLastHarvestMs;
68 ServerObjectMap mServerObjectMap;
73 std::shared_ptr<T> getServerObjectImpl(
74 const std::string & objectKey,
75 std::uint32_t timeoutMs,
76 bool createIfDoesntExist)
78 typedef std::shared_ptr<T> TPtr;
82 ServerObjectMap::iterator iter = mServerObjectMap.find(objectKey);
83 if (iter != mServerObjectMap.end())
85 ServerObjectHolder & holder = iter->second;
86 Any & a = holder.mServerObject;
87 TPtr & tPtr = a.get<TPtr>();
92 holder.mLastTouchMs = getCurrentTimeMs();
93 RCF_ASSERT(holder.mUseCount >= 0);
95 TPtr ptr(pt, std::bind(&ServerObjectService::customDeleter,
this, objectKey, std::placeholders::_1));
98 else if (createIfDoesntExist)
102 mServerObjectMap[objectKey] = ServerObjectHolder(Any(tPtr), timeoutMs);
103 ServerObjectHolder & holder = mServerObjectMap[objectKey];
106 holder.mLastTouchMs = getCurrentTimeMs();
107 RCF_ASSERT(holder.mUseCount >= 0);
109 TPtr ptr(pt, std::bind(&ServerObjectService::customDeleter,
this, objectKey, std::placeholders::_1));
121 std::shared_ptr<T> queryServerObject(
122 const std::string & objectKey)
124 return getServerObjectImpl<T>(objectKey, 0,
false);
128 std::shared_ptr<T> getServerObject(
129 const std::string & objectKey,
130 std::uint32_t timeoutMs)
132 return getServerObjectImpl<T>(objectKey, timeoutMs,
true);
135 void deleteServerObject(
const std::string & objectKey);
140 #endif // ! INCLUDE_RCF_SERVEROBJECTSERVICE_HPP Definition: AmiIoHandler.hpp:24