#ifndef WRTDEVICEAPIS_COMMONS_EVENT_RECEIVER_H_
#define WRTDEVICEAPIS_COMMONS_EVENT_RECEIVER_H_
+#include <memory>
+#include <mutex>
#include <assert.h>
#include <dpl/event/thread_event_dispatcher.h>
-#include <dpl/shared_ptr.h>
#include <dpl/event/controller.h>
#include <dpl/type_list.h>
#include <dpl/event/abstract_event_call.h>
+#include <dpl/log/log.h>
#include <dpl/log/secure_log.h>
#include <Commons/ThreadPool.h>
template<class TemplateEvent>
class SignalEventCall : public DPL::Event::AbstractEventCall
{
- DPL::SharedPtr<TemplateEvent> m_event;
+ std::shared_ptr<TemplateEvent> m_event;
public:
- SignalEventCall(const DPL::SharedPtr<TemplateEvent> &event) : m_event(event)
+ SignalEventCall(const std::shared_ptr<TemplateEvent> &event) : m_event(event)
{}
virtual void Call()
{
template<class TemplateEvent>
class EventReceiver :
protected DPL::Event::Controller<
- typename DPL::TypeListDecl<DPL::SharedPtr<TemplateEvent> >::Type>
+ typename DPL::TypeListDecl<std::shared_ptr<TemplateEvent> >::Type>
{
DPL::Event::ThreadEventDispatcher m_threadDispatcher;
{
DPL::Thread *thread =
ThreadPool::getInstance().getThreadRef(threadType);
- DPL::Event::ControllerEventHandler<DPL::SharedPtr<TemplateEvent> >::
+ DPL::Event::ControllerEventHandler<std::shared_ptr<TemplateEvent> >::
Touch();
- DPL::Event::ControllerEventHandler<DPL::SharedPtr<TemplateEvent> >::
+ DPL::Event::ControllerEventHandler<std::shared_ptr<TemplateEvent> >::
SwitchToThread(thread);
}
- void signalEventByDispatcher(const DPL::SharedPtr<TemplateEvent> &event)
+ void signalEventByDispatcher(const std::shared_ptr<TemplateEvent> &event)
{
_D("called");
Try {
virtual ~EventReceiver()
{
- DPL::Event::ControllerEventHandler<DPL::SharedPtr<TemplateEvent> >::
+ DPL::Event::ControllerEventHandler<std::shared_ptr<TemplateEvent> >::
SwitchToThread(NULL);
}
};
EventRequestReceiver(ThreadEnum::Enumeration threadType) : EventReceiver<
TemplateEvent>(threadType)
{}
- virtual void OnRequestReceived(const DPL::SharedPtr<TemplateEvent> &event)
- = 0;
+
+ virtual void OnRequestReceived(const std::shared_ptr<TemplateEvent> &) = 0;
/*
*
* @argument delaySeconds - event will be received not sooner than after
* delay (in seconds)
*/
- void PostRequest(const DPL::SharedPtr<TemplateEvent> &event,
+ void PostRequest(const std::shared_ptr<TemplateEvent> &event,
double delaySeconds = 0.0)
{
_D("called");
{
- DPL::Mutex::ScopedLock lock(&event->m_stateMutex);
- assert(TemplateEvent::STATE_INITIAL == event->m_state);
+ std::lock_guard<std::mutex> lock(event->m_stateMutex);
+ Assert(TemplateEvent::STATE_INITIAL == event->m_state);
event->m_state = TemplateEvent::STATE_REQUEST_SEND;
}
}
if (0.0 == delaySeconds) {
- DPL::Event::ControllerEventHandler<DPL::SharedPtr<TemplateEvent> >
+ DPL::Event::ControllerEventHandler<std::shared_ptr<TemplateEvent> >
::
PostEvent(event);
} else {
- DPL::Event::ControllerEventHandler<DPL::SharedPtr<TemplateEvent> >
+ DPL::Event::ControllerEventHandler<std::shared_ptr<TemplateEvent> >
::
PostTimedEvent(event, delaySeconds);
}
switch (event->getHandlingType()) {
case TemplateEvent::HANDLING_NOT_SET:
- assert(0);
+ Assert(0);
break;
case TemplateEvent::HANDLING_SYNCHRONOUS:
event->waitForAnswer();
}
}
- void OnEventReceived(const DPL::SharedPtr<TemplateEvent> &event)
+ void OnEventReceived(const std::shared_ptr<TemplateEvent> &event)
{
_D("called");
{
- DPL::Mutex::ScopedLock lock(&event->m_stateMutex);
+ std::lock_guard<std::mutex> lock(event->m_stateMutex);
if (event->m_cancelled) {
event->handleCancel();
event->m_cancelAllowed = true;
event->signalFinishedFlag();
return;
} else {
- assert(
+ Assert(
TemplateEvent::STATE_REQUEST_SEND == event->m_state &&
"Wrong state!");
}
//After Controller ends processing it should call it to signal that work
// is done
{
- DPL::Mutex::ScopedLock lock(&event->m_stateMutex);
+ std::lock_guard<std::mutex> lock(event->m_stateMutex);
if (event->m_cancelled) {
//if cancel was not handled in OnRequestReceived when we should
switch (event->m_handlingType) {
case TemplateEvent::HANDLING_NOT_SET:
- assert(0);
+ Assert(0);
break;
case TemplateEvent::HANDLING_SYNCHRONOUS:
//event->Signal();
}
}
- virtual void ManualAnswer(const DPL::SharedPtr<TemplateEvent> &event)
+ virtual void ManualAnswer(const std::shared_ptr<TemplateEvent> &event)
{
_D("called");
- assert(
+ Assert(
event->m_handlingType ==
TemplateEvent::HANDLING_ASYNCHRONOUS_MANUAL_ANSWER ||
event->m_handlingType ==
TemplateEvent::HANDLING_SYNCHRONOUS_MANUAL_ANSWER);
{
- DPL::Mutex::ScopedLock lock(&event->m_stateMutex);
+ std::lock_guard<std::mutex> lock(event->m_stateMutex);
if (event->m_cancelled) {
//if cancel was not handled in OnRequestReceived when we should
//process as if it was not cancelled at all.
TemplateEvent>(threadType)
{}
- virtual void OnAnswerReceived(const DPL::SharedPtr<TemplateEvent> &event) =
- 0;
+ virtual void OnAnswerReceived(const std::shared_ptr<TemplateEvent> &) = 0;
//it should be hidden outside, but I can't do it! I can't! :|
- void PostAnswer(const DPL::SharedPtr<TemplateEvent> &event)
+ void PostAnswer(const std::shared_ptr<TemplateEvent> &event)
{
- LogDebug(__FUNCTION__);
+ _D("called");
event->signalCancelStatusFlag();
- DPL::Event::ControllerEventHandler<DPL::SharedPtr<TemplateEvent> >::
+ DPL::Event::ControllerEventHandler<std::shared_ptr<TemplateEvent> >::
PostEvent(
event);
}
- void OnEventReceived(const DPL::SharedPtr<TemplateEvent> &event)
+ void OnEventReceived(const std::shared_ptr<TemplateEvent> &event)
{
_D("EventAnswerReceiver: answer received");
//check if it can be processed and set the state
{
- DPL::Mutex::ScopedLock lock(&event->m_stateMutex);
+ std::lock_guard<std::mutex> lock(event->m_stateMutex);
//in case someone changed it to synchronous call, we don't process
// it
return;
}
//we should get cancelled or answer_send state here
- assert(
+ Assert(
TemplateEvent::STATE_ANSWER_SEND == event->m_state &&
"Wrong state!");
OnAnswerReceived(event);
{
- DPL::Mutex::ScopedLock lock(&event->m_stateMutex);
- assert(TemplateEvent::STATE_ANSWER_RECEIVED == event->m_state);
+ std::lock_guard<std::mutex> lock(event->m_stateMutex);
+ Assert(TemplateEvent::STATE_ANSWER_RECEIVED == event->m_state);
event->m_state = TemplateEvent::STATE_ENDED;
delete event->m_cancelStatusFlag;
event->m_cancelStatusFlag = NULL;