#include "RCSResourceAttributes.h"
#include "ExpiryTimer.h"
+#include "ocrandom.h"
+
namespace OIC
{
namespace Service
{
void verifyObserveCB(
const HeaderOptions &_hos, const ResponseStatement &_rep,
- int _result, int _seq, std::weak_ptr<DataCache> rpPtr)
+ int _result, unsigned int _seq, std::weak_ptr<DataCache> rpPtr)
{
- std::shared_ptr<DataCache> Ptr = rpPtr.lock();
- if (Ptr)
+ std::shared_ptr<DataCache> ptr = rpPtr.lock();
+ if (ptr)
{
- Ptr->onObserve(_hos, _rep, _result, _seq);
+ ptr->onObserve(_hos, _rep, _result, _seq);
}
}
subscriberList.release();
}
- if (mode == CACHE_MODE::OBSERVE)
+ if (sResource->isObservable())
{
try
{
{
sResource->requestObserve(pObserveCB);
}
- networkTimeOutHandle = networkTimer.postTimer(CACHE_DEFAULT_EXPIRED_MILLITIME, pTimerCB);
+ networkTimeOutHandle = networkTimer.post(CACHE_DEFAULT_EXPIRED_MILLITIME, pTimerCB);
}
CacheID DataCache::addSubscriber(CacheCB func, REPORT_FREQUENCY rf, long repeatTime)
const PrimitiveResourcePtr DataCache::getPrimitiveResource() const
{
- return (sResource != nullptr) ? sResource : nullptr;
+ return sResource;
}
const RCSResourceAttributes DataCache::getCachedData() const
}
void DataCache::onObserve(const HeaderOptions & /*_hos*/,
- const ResponseStatement &_rep, int _result, int _seq)
+ const ResponseStatement &_rep, int _result, unsigned int _seq)
{
- if (_result != OC_STACK_OK || _rep.getAttributes().empty() || lastSequenceNum > _seq)
- {
- return;
- }
- else
- {
- lastSequenceNum = _seq;
- }
+ lastSequenceNum = _seq;
if (state != CACHE_STATE::READY)
{
mode = CACHE_MODE::OBSERVE;
}
- networkTimer.cancelTimer(networkTimeOutHandle);
- networkTimeOutHandle = networkTimer.postTimer(CACHE_DEFAULT_EXPIRED_MILLITIME, pTimerCB);
+ networkTimer.cancel(networkTimeOutHandle);
+ networkTimeOutHandle = networkTimer.post(CACHE_DEFAULT_EXPIRED_MILLITIME, pTimerCB);
- notifyObservers(_rep.getAttributes());
+ notifyObservers(_rep.getAttributes(), _result);
}
void DataCache::onGet(const HeaderOptions & /*_hos*/,
if (mode != CACHE_MODE::OBSERVE)
{
- networkTimer.cancelTimer(networkTimeOutHandle);
- networkTimeOutHandle = networkTimer.postTimer(
+ networkTimer.cancel(networkTimeOutHandle);
+ networkTimeOutHandle = networkTimer.post(
CACHE_DEFAULT_EXPIRED_MILLITIME, pTimerCB);
- pollingHandle = pollingTimer.postTimer(CACHE_DEFAULT_REPORT_MILLITIME, pPollingCB);
+ pollingHandle = pollingTimer.post(CACHE_DEFAULT_REPORT_MILLITIME, pPollingCB);
}
- notifyObservers(_rep.getAttributes());
+ notifyObservers(_rep.getAttributes(), _result);
}
- void DataCache::notifyObservers(const RCSResourceAttributes Att)
+ void DataCache::notifyObservers(const RCSResourceAttributes Att, int eCode)
{
{
std::lock_guard<std::mutex> lock(att_mutex);
{
if (i.second.first.rf == REPORT_FREQUENCY::UPTODATE)
{
- i.second.second(this->sResource, Att);
+ i.second.second(this->sResource, Att, eCode);
}
}
}
sResource->cancelObserve();
mode = CACHE_MODE::FREQUENCY;
- networkTimer.cancelTimer(networkTimeOutHandle);
- networkTimeOutHandle = networkTimer.postTimer(
+ networkTimer.cancel(networkTimeOutHandle);
+ networkTimeOutHandle = networkTimer.post(
CACHE_DEFAULT_EXPIRED_MILLITIME, pTimerCB);
- pollingHandle = pollingTimer.postTimer(CACHE_DEFAULT_REPORT_MILLITIME, pPollingCB);
+ pollingHandle = pollingTimer.post(CACHE_DEFAULT_REPORT_MILLITIME, pPollingCB);
return;
}
CacheID DataCache::generateCacheID()
{
CacheID retID = 0;
- srand(time(NULL));
-
while (1)
{
if (findSubscriber(retID).first == 0 && retID != 0)
{
break;
}
- retID = rand();
- }
+ retID = OCGetRandom();
+ }
return retID;
}