14#include "keyple/core/service/CardRemovalPassiveMonitoringJobAdapter.hpp"
18#include "keyple/core/plugin/ReaderIOException.hpp"
19#include "keyple/core/plugin/TaskCanceledException.hpp"
20#include "keyple/core/plugin/spi/reader/observable/state/processing/CardPresenceMonitorBlockingSpi.hpp"
21#include "keyple/core/plugin/spi/reader/observable/state/processing/WaitForCardRemovalDuringProcessingBlockingSpi.hpp"
22#include "keyple/core/plugin/spi/reader/observable/state/removal/CardRemovalWaiterBlockingSpi.hpp"
23#include "keyple/core/plugin/spi/reader/observable/state/removal/WaitForCardRemovalBlockingSpi.hpp"
24#include "keyple/core/service/ObservableLocalReaderAdapter.hpp"
25#include "keyple/core/util/cpp/exception/RuntimeException.hpp"
31using keyple::core::plugin::ReaderIOException;
32using keyple::core::plugin::TaskCanceledException;
33using keyple::core::plugin::spi::reader::observable::state::processing::
34 CardPresenceMonitorBlockingSpi;
35using keyple::core::plugin::spi::reader::observable::state::processing::
36 WaitForCardRemovalDuringProcessingBlockingSpi;
37using keyple::core::plugin::spi::reader::observable::state::removal::
38 CardRemovalWaiterBlockingSpi;
39using keyple::core::plugin::spi::reader::observable::state::removal::
40 WaitForCardRemovalBlockingSpi;
41using keyple::core::util::cpp::exception::RuntimeException;
48CardRemovalPassiveMonitoringJobAdapter::CardRemovalPassiveMonitoringJob ::
49 CardRemovalPassiveMonitoringJob(
50 std::shared_ptr<AbstractObservableStateAdapter> monitoringState,
51 CardRemovalPassiveMonitoringJobAdapter* parent)
52: Job(
"CardRemovalPassiveMonitoringJobAdapter")
53, mMonitoringState(monitoringState)
59CardRemovalPassiveMonitoringJobAdapter::CardRemovalPassiveMonitoringJob::
62 bool isTaskCanceled =
false;
64 auto cardRemovalWaiterBlockingSpi
65 = std::dynamic_pointer_cast<CardRemovalWaiterBlockingSpi>(
67 auto waitForCardRemovalBlockingSpi
68 = std::dynamic_pointer_cast<WaitForCardRemovalBlockingSpi>(
70 auto cardPresenceMonitorBlockingSpi
71 = std::dynamic_pointer_cast<CardPresenceMonitorBlockingSpi>(
73 auto waitForCardRemovalDuringProcessingBlockingSpi
74 = std::dynamic_pointer_cast<
75 WaitForCardRemovalDuringProcessingBlockingSpi>(mParent->mReaderSpi);
78 if (cardRemovalWaiterBlockingSpi) {
79 cardRemovalWaiterBlockingSpi->waitForCardRemoval();
80 }
else if (waitForCardRemovalBlockingSpi) {
81 waitForCardRemovalBlockingSpi->waitForCardRemoval();
82 }
else if (cardPresenceMonitorBlockingSpi) {
83 cardPresenceMonitorBlockingSpi
84 ->monitorCardPresenceDuringProcessing();
85 }
else if (waitForCardRemovalDuringProcessingBlockingSpi) {
86 waitForCardRemovalDuringProcessingBlockingSpi
87 ->waitForCardRemovalDuringProcessing();
89 }
catch (
const ReaderIOException& e) {
91 mParent->mLogger->warn(
92 "Monitoring job error while processing card removal event on "
94 mParent->getReader()->getName(),
96 }
catch (
const TaskCanceledException& e) {
97 isTaskCanceled =
true;
98 mParent->mLogger->warn(
99 "Monitoring job process cancelled: %\n", e.getMessage());
100 }
catch (
const RuntimeException& e) {
102 ->getObservationExceptionHandler()
103 ->onReaderObservationError(
104 mParent->getReader()->getPluginName(),
105 mParent->getReader()->getName(),
106 std::make_shared<RuntimeException>(e));
110 if (!isTaskCanceled) {
111 mMonitoringState->onEvent(InternalEvent::CARD_REMOVED);
118CardRemovalPassiveMonitoringJobAdapter::CardRemovalPassiveMonitoringJobAdapter(
119 ObservableLocalReaderAdapter* reader)
120: AbstractMonitoringJobAdapter(reader)
122 mReaderSpi = reader->getObservableReaderSpi();
126CardRemovalPassiveMonitoringJobAdapter::getMonitoringJob(
127 std::shared_ptr<AbstractObservableStateAdapter> monitoringState)
129 return std::make_shared<CardRemovalPassiveMonitoringJob>(
130 monitoringState,
this);
134CardRemovalPassiveMonitoringJobAdapter::stop()
136 mLogger->trace(
"Stop monitoring job process\n");
138 auto cardRemovalWaiterBlockingSpi
139 = std::dynamic_pointer_cast<CardRemovalWaiterBlockingSpi>(mReaderSpi);
140 auto waitForCardRemovalBlockingSpi
141 = std::dynamic_pointer_cast<WaitForCardRemovalBlockingSpi>(mReaderSpi);
142 auto cardPresenceMonitorBlockingSpi
143 = std::dynamic_pointer_cast<CardPresenceMonitorBlockingSpi>(mReaderSpi);
144 auto waitForCardRemovalDuringProcessingBlockingSpi
145 = std::dynamic_pointer_cast<
146 WaitForCardRemovalDuringProcessingBlockingSpi>(mReaderSpi);
148 if (cardRemovalWaiterBlockingSpi) {
149 cardRemovalWaiterBlockingSpi->stopWaitForCardRemoval();
150 }
else if (waitForCardRemovalBlockingSpi) {
151 waitForCardRemovalBlockingSpi->stopWaitForCardRemoval();
152 }
else if (cardPresenceMonitorBlockingSpi) {
153 cardPresenceMonitorBlockingSpi
154 ->stopCardPresenceMonitoringDuringProcessing();
155 }
else if (waitForCardRemovalDuringProcessingBlockingSpi) {
156 waitForCardRemovalDuringProcessingBlockingSpi
157 ->stopWaitForCardRemovalDuringProcessing();
160 mLogger->trace(
"Monitoring job process stopped\n");
ObservableLocalReaderAdapter::InternalEvent InternalEvent