14#include "keyple/core/service/AbstractReaderAdapter.hpp"
20#include "keyple/core/util/KeypleAssert.hpp"
21#include "keyple/core/util/cpp/System.hpp"
22#include "keyple/core/util/cpp/exception/Exception.hpp"
23#include "keyple/core/util/cpp/exception/IllegalStateException.hpp"
24#include "keypop/card/CardBrokenCommunicationException.hpp"
25#include "keypop/card/UnexpectedStatusWordException.hpp"
31using keyple::core::util::Assert;
32using keyple::core::util::cpp::System;
33using keyple::core::util::cpp::exception::Exception;
34using keyple::core::util::cpp::exception::IllegalStateException;
35using keypop::card::CardBrokenCommunicationException;
36using keypop::card::UnexpectedStatusWordException;
38AbstractReaderAdapter::AbstractReaderAdapter(
39 const std::string& readerName,
40 std::shared_ptr<KeypleReaderExtension> readerExtension,
41 const std::string& pluginName)
42: mReaderName(readerName)
43, mReaderExtension(readerExtension)
44, mPluginName(pluginName)
51AbstractReaderAdapter::getPluginName()
const
56std::shared_ptr<KeypleReaderExtension>
57AbstractReaderAdapter::getExtension(
58 const std::type_info& )
const
62 return mReaderExtension;
65const std::vector<std::shared_ptr<CardSelectionResponseApi>>
66AbstractReaderAdapter::transmitCardSelectionRequests(
67 const std::vector<std::shared_ptr<CardSelectorBase>>& cardSelectors,
68 const std::vector<std::shared_ptr<CardSelectionRequestSpi>>&
69 cardSelectionRequests,
70 const MultiSelectionProcessing multiSelectionProcessing,
71 const ChannelControl channelControl)
75 std::vector<std::shared_ptr<CardSelectionResponseApi>>
76 cardSelectionResponses;
78 uint64_t timeStamp = System::nanoTime();
79 uint64_t elapsed10ms = (timeStamp - mBefore) / 100000;
83 "Reader [%] --> cardSelectionRequests: %, elapsed % ms\n",
85 cardSelectionRequests,
89 cardSelectionResponses = processCardSelectionRequests(
91 cardSelectionRequests,
92 multiSelectionProcessing,
94 }
catch (
const UnexpectedStatusWordException& e) {
95 throw CardBrokenCommunicationException(
98 "An unexpected status word was received",
99 std::make_shared<UnexpectedStatusWordException>(e));
102 timeStamp = System::nanoTime();
103 elapsed10ms = (timeStamp - mBefore) / 100000;
107 "Reader [%] <-- cardSelectionResponses: %, elapsed % ms\n",
109 cardSelectionResponses,
112 return cardSelectionResponses;
116AbstractReaderAdapter::checkStatus()
const
118 if (!mIsRegistered) {
119 throw IllegalStateException(
120 "This reader, " + getName() +
" is not registered");
125AbstractReaderAdapter::doRegister()
127 mIsRegistered =
true;
131AbstractReaderAdapter::doUnregister()
133 mIsRegistered =
false;
137AbstractReaderAdapter::getName()
const
142const std::shared_ptr<CardResponseApi>
143AbstractReaderAdapter::transmitCardRequest(
144 const std::shared_ptr<CardRequestSpi> cardRequest,
145 const ChannelControl channelControl)
149 Assert::getInstance().notNull(cardRequest,
"cardRequest");
151 std::shared_ptr<CardResponseApi> cardResponse =
nullptr;
153 uint64_t timeStamp = System::nanoTime();
154 uint64_t elapsed10ms = (timeStamp - mBefore) / 100000;
158 "Reader [%] --> cardRequest: %, elapsed % ms\n",
164 cardResponse = processCardRequest(cardRequest, channelControl);
165 }
catch (
const Exception& e) {
168 timeStamp = System::nanoTime();
169 elapsed10ms = (timeStamp - mBefore) / 100000;
172 "Reader [%] <-- cardResponse: %, elapsed % ms\n",
180 timeStamp = System::nanoTime();
181 elapsed10ms = (timeStamp - mBefore) / 100000;
184 "[%] receive => %, elapsed % ms\n",