14#include "keyple/core/service/LocalPoolPluginAdapter.hpp"
22#include "keyple/core/common/KeypleReaderExtension.hpp"
23#include "keyple/core/plugin/PluginIOException.hpp"
24#include "keyple/core/plugin/spi/reader/PoolReaderSpi.hpp"
25#include "keyple/core/service/KeyplePluginException.hpp"
26#include "keyple/core/util/KeypleAssert.hpp"
27#include "keyple/core/util/cpp/exception/Exception.hpp"
33using keyple::core::common::KeypleReaderExtension;
34using keyple::core::plugin::PluginIOException;
35using keyple::core::plugin::spi::reader::PoolReaderSpi;
36using keyple::core::util::Assert;
37using keyple::core::util::cpp::exception::Exception;
39LocalPoolPluginAdapter::LocalPoolPluginAdapter(
40 std::shared_ptr<PoolPluginSpi> poolPluginSpi)
41: AbstractPluginAdapter(
42 poolPluginSpi->getName(),
43 std::dynamic_pointer_cast<KeyplePluginExtension>(poolPluginSpi))
44, mPoolPluginSpi(poolPluginSpi)
49LocalPoolPluginAdapter::doUnregister()
52 mPoolPluginSpi->onUnregister();
53 }
catch (
const Exception& e) {
55 "Error unregistering plugin extension [%]: %\n",
60 AbstractPluginAdapter::doUnregister();
63const std::vector<std::string>
64LocalPoolPluginAdapter::getReaderGroupReferences()
const
69 return mPoolPluginSpi->getReaderGroupReferences();
70 }
catch (
const PluginIOException& e) {
71 throw KeyplePluginException(
72 std::string(
"Pool plugin [") + getName()
73 +
"] is unable to get reader group references: "
79std::shared_ptr<CardReader>
80LocalPoolPluginAdapter::allocateReader(
const std::string& readerGroupReference)
85 "Pool plugin [%] allocates reader of group reference [%]\n",
87 readerGroupReference);
89 Assert::getInstance().notEmpty(
90 readerGroupReference,
"readerGroupReference");
92 std::shared_ptr<ReaderSpi> readerSpi =
nullptr;
95 readerSpi = mPoolPluginSpi->allocateReader(readerGroupReference);
96 }
catch (
const PluginIOException& e) {
97 throw KeyplePluginException(
98 std::string(
"Pool plugin [") + getName()
99 +
"] unable to allocate reader of reader group reference ["
100 + readerGroupReference +
"]: " + e.getMessage(),
104 std::shared_ptr<LocalReaderAdapter> localReaderAdapter
105 = buildLocalReaderAdapter(readerSpi);
106 getReadersMap().insert({localReaderAdapter->getName(), localReaderAdapter});
107 localReaderAdapter->doRegister();
109 return localReaderAdapter;
113LocalPoolPluginAdapter::releaseReader(std::shared_ptr<CardReader> reader)
118 "Pool plugin [%] releases reader [%]\n",
120 reader !=
nullptr ? reader->getName() :
"null");
122 Assert::getInstance().notNull(reader,
"reader");
125 mPoolPluginSpi->releaseReader(
126 std::dynamic_pointer_cast<LocalReaderAdapter>(reader)
130 getReadersMap().erase(reader->getName());
131 std::dynamic_pointer_cast<LocalReaderAdapter>(reader)->doUnregister();
132 }
catch (
const PluginIOException& e) {
134 getReadersMap().erase(reader->getName());
135 std::dynamic_pointer_cast<LocalReaderAdapter>(reader)->doUnregister();
136 throw KeyplePluginException(
137 std::string(
"Pool plugin [") + getName()
138 +
"] unable to release reader [" + reader->getName()
139 +
"]: " + e.getMessage(),
144std::shared_ptr<SmartCard>
145LocalPoolPluginAdapter::getSelectedSmartCard(
146 const std::shared_ptr<CardReader> reader)
148 Assert::getInstance().notNull(reader,
"reader");
150 auto poolReaderSpi = std::dynamic_pointer_cast<PoolReaderSpi>(
151 getReaderExtension(
typeid(KeypleReaderExtension), reader->getName()));
153 return std::dynamic_pointer_cast<SmartCard>(
154 poolReaderSpi->getSelectedSmartCard());