######################################################################
resourcecache_env.AppendUnique(CPPPATH = ['include'])
resourcecache_env.AppendUnique(CPPPATH = ['../common/primitiveResource/include'])
-resourcecache_env.PrependUnique(LIBS = ['service_common', 'oc', 'octbstack', 'oc_logger', 'connectivity_abstraction', 'libcoap'])
+resourcecache_env.AppendUnique(CPPPATH = ['../common/primitiveTimer/include'])
+resourcecache_env.PrependUnique(LIBS = ['service_common', 'PrimitiveTimer', 'oc', 'octbstack', 'oc_logger', 'connectivity_abstraction', 'libcoap'])
if target_os not in ['windows', 'winrt']:
resourcecache_env.AppendUnique(CXXFLAGS = ['-O2', '-g', '-Wall', '-fmessage-length=0', '-std=c++11'])
#include "logger.h"
#include "CacheTypes.h"
+#include "PrimitiveTimer.h"
class DataCache
{
// subscriber info
std::unique_ptr<SubscriberInfo> subscriberList;
+ PrimitiveTimer *timerInstance;
+
// for requestCB from base
void onObserve(const HeaderOptions& _hos,
const ResponseStatement& _rep, int _result, int _seq);
void onGet(const HeaderOptions& _hos, const ResponseStatement& _rep, int _result);
-
+ void *onTimer(const unsigned int timerID);
ObserveCB pObserveCB;
GetCB pGetCB;
+ TimerCB pTimerCB;
OCStackResult updateCacheData();
- // for timer
- void setUpdateTime();
- void onTimer();
- bool isAvailable();
-
};
#endif /* DATACACHE_H_ */
#include "ResponseStatement.h"
#include "ResourceAttributes.h"
+#include "PrimitiveTimer.h"
DataCache::DataCache(
PrimitiveResourcePtr pResource,
{
subscriberList = std::unique_ptr<SubscriberInfo>(new SubscriberInfo());
+ timerInstance = new PrimitiveTimer;
state = CACHE_STATE::READY_YET;
updateTime = 0l;
std::placeholders::_3, std::placeholders::_4));
pGetCB = (GetCB)(std::bind(&DataCache::onGet, this,
std::placeholders::_1, std::placeholders::_2, std::placeholders::_3));
+ pTimerCB = (TimerCB)(std::bind(&DataCache::onTimer, this, std::placeholders::_1));
+ pResource->requestGet(pGetCB);
if(pResource->isObservable())
{
pResource->requestObserve(pObserveCB);
- pResource->requestGet(pGetCB);
}
else
{
// TODO set timer
+ TimerID timerId = timerInstance->requestTimer(repeatTime, pTimerCB);
}
}
}
else
{
+ attributes = _rep.getAttributes();
+ ResourceAttributes retAtt = attributes;
+ for(auto & i : * subscriberList)
+ {
+ if(i.second.first.rf != REPORT_FREQUENCY::NONE)
+ {
+ i.second.second(this->sResource, retAtt);
+ }
+ }
}
}
{
return state;
}
+
+void *DataCache::onTimer(const unsigned int timerID)
+{
+ sResource->requestGet(pGetCB);
+ TimerID timerId = timerInstance->requestTimer(5l, pTimerCB);
+}
\ No newline at end of file