class NoLockException: public RCSException
{
public:
- NoLockException(std::string &&what) : RCSException { std::move(what) } {}
+ NoLockException(std::string what) : RCSException { std::move(what) } {}
};
//! @cond
* in instead of overriding SetRequestHandler.
* </p>
*/
- class RCSResourceObject : public std::enable_shared_from_this< RCSResourceObject >
+ class RCSResourceObject
{
private:
class WeakGuard;
static OCEntityHandlerResult entityHandler(const std::weak_ptr< RCSResourceObject >&,
const std::shared_ptr< OC::OCResourceRequest >&);
- OCEntityHandlerResult handleRequest(const std::shared_ptr< OC::OCResourceRequest >&);
+ OCEntityHandlerResult handleRequest(const RCSRequest&);
OCEntityHandlerResult handleRequestGet(const RCSRequest&);
OCEntityHandlerResult handleRequestSet(const RCSRequest&);
- OCEntityHandlerResult handleObserve(const std::shared_ptr< OC::OCResourceRequest >&);
+ OCEntityHandlerResult handleObserve(const RCSRequest&);
template <typename RESPONSE, typename RESPONSE_BUILDER>
OCEntityHandlerResult sendResponse(const RCSRequest&,
#include "RCSResourceObject.h"
#include <functional>
-#include <vector>
#include "RequestHandler.h"
#include "AssertUtils.h"
template< typename HANDLER, typename RESPONSE =
typename std::decay<HANDLER>::type::result_type >
- RESPONSE invokeHandler(const RCSResourceObject::Ptr& resObj, RCSResourceAttributes& attrs,
- const std::shared_ptr< OC::OCResourceRequest >& ocRequest,
+ RESPONSE invokeHandler(RCSResourceAttributes& attrs, const RCSRequest& request,
std::shared_ptr< HANDLER > handler)
{
if (handler)
{
- return (*handler)(RCSRequest{ resObj, ocRequest }, attrs);
+ return (*handler)(request, attrs);
}
return RESPONSE::defaultAction();
try
{
+ RCSRequest rcsRequest{ resource, request };
+
if (request->getRequestHandlerFlag() & OC::RequestHandlerFlag::RequestFlag)
{
- return resource->handleRequest(request);
+ return resource->handleRequest(rcsRequest);
}
if (request->getRequestHandlerFlag() & OC::RequestHandlerFlag::ObserverFlag)
{
- return resource->handleObserve(request);
+ return resource->handleObserve(rcsRequest);
}
}
catch (const std::exception& e)
}
OCEntityHandlerResult RCSResourceObject::handleRequest(
- const std::shared_ptr< OC::OCResourceRequest >& request)
+ const RCSRequest& request)
{
- assert(request != nullptr);
-
- RCSRequest rcsRequest{ shared_from_this(), request };
-
- if (rcsRequest.getInterface() != "" && m_interfaceHandlers.find(
- rcsRequest.getInterface()) == m_interfaceHandlers.end())
+ if (request.getInterface() != "" &&
+ m_interfaceHandlers.find(request.getInterface()) == m_interfaceHandlers.end())
{
return OC_EH_ERROR;
}
- if (request->getRequestType() == "GET")
+ if (request.getOCRequest()->getRequestType() == "GET")
{
- return handleRequestGet(rcsRequest);
+ return handleRequestGet(request);
}
- if (request->getRequestType() == "POST")
+ if (request.getOCRequest()->getRequestType() == "POST")
{
- return handleRequestSet(rcsRequest);
+ return handleRequestSet(request);
}
return OC_EH_ERROR;
}
- OCEntityHandlerResult RCSResourceObject::handleRequestGet(
- const RCSRequest& request)
+ OCEntityHandlerResult RCSResourceObject::handleRequestGet(const RCSRequest& request)
{
if (!findInterfaceHandler(request.getInterface()).isGetSupported())
{
}
auto attrs = getAttributesFromOCRequest(request.getOCRequest());
- auto response = invokeHandler(shared_from_this(), attrs, request.getOCRequest(),
- m_getRequestHandler);
+
+ auto response = invokeHandler(attrs, request, m_getRequestHandler);
if (response.isSeparate()) return OC_EH_SLOW;
return !replaced.empty();
}
- OCEntityHandlerResult RCSResourceObject::handleRequestSet(
- const RCSRequest& request)
+ OCEntityHandlerResult RCSResourceObject::handleRequestSet(const RCSRequest& request)
{
if (!findInterfaceHandler(request.getInterface()).isSetSupported())
{
auto attrs = getAttributesFromOCRequest(request.getOCRequest());
- auto response = invokeHandler(shared_from_this(), attrs, request.getOCRequest(),
- m_setRequestHandler);
+ auto response = invokeHandler(attrs, request, m_setRequestHandler);
if (response.isSeparate()) return OC_EH_SLOW;
findInterfaceHandler(request.getInterface()).getSetResponseBuilder());
}
- OCEntityHandlerResult RCSResourceObject::handleObserve(
- const std::shared_ptr< OC::OCResourceRequest >&)
+ OCEntityHandlerResult RCSResourceObject::handleObserve(const RCSRequest&)
{
if (!isObservable())
{