14#include "keyple/core/service/AutonomousObservableLocalPluginAdapter.hpp"
20#include "keyple/core/service/PluginEventAdapter.hpp"
21#include "keyple/core/util/KeypleAssert.hpp"
22#include "keyple/core/util/cpp/exception/Exception.hpp"
23#include "keypop/reader/CardReader.hpp"
29using keyple::core::util::cpp::exception::Exception;
30using keypop::reader::CardReader;
32AutonomousObservableLocalPluginAdapter::AutonomousObservableLocalPluginAdapter(
33 std::shared_ptr<AutonomousObservablePluginSpi>
34 autonomousObservablePluginSpi)
35: AbstractObservableLocalPluginAdapter(autonomousObservablePluginSpi)
38 autonomousObservablePluginSpi->setCallback(
this);
39 }
catch (
const Exception& e) {
41 "Method 'setCallback(...)' unavailable for legacy plugin: %\n",
43 autonomousObservablePluginSpi->connect(
this);
48AutonomousObservableLocalPluginAdapter::onReaderConnected(
49 const std::vector<std::shared_ptr<ReaderSpi>>& readers)
51 Assert::getInstance().notEmpty(readers,
"readers");
52 std::vector<std::string> notifyReaders;
54 for (
const auto& readerSpi : readers) {
57 notifyReaders.push_back(readerSpi->getName());
60 notifyObservers(std::make_shared<PluginEventAdapter>(
61 getName(), notifyReaders, PluginEvent::Type::READER_CONNECTED));
65AutonomousObservableLocalPluginAdapter::onReaderDisconnected(
66 const std::vector<std::string>& readerNames)
68 Assert::getInstance().notEmpty(readerNames,
"readerNames");
69 std::vector<std::string> notifyReaders;
71 for (
const auto& readerName : readerNames) {
72 const std::shared_ptr<CardReader> reader = getReader(readerName);
73 if (reader ==
nullptr) {
75 "Plugin [%] unable to remove unknown reader [%]\n",
80 std::dynamic_pointer_cast<LocalReaderAdapter>(reader)
82 getReadersMap().erase(reader->getName());
84 "Plugin [%] removes reader [%] from readers list\n",
88 notifyReaders.push_back(readerName);
92 notifyObservers(std::make_shared<PluginEventAdapter>(
93 getName(), notifyReaders, PluginEvent::Type::READER_DISCONNECTED));
97AutonomousObservableLocalPluginAdapter::addReader(
98 std::shared_ptr<ReaderSpi> readerSpi)
100 std::shared_ptr<LocalReaderAdapter> reader
101 = buildLocalReaderAdapter(readerSpi);
102 reader->doRegister();
103 getReadersMap().insert({reader->getName(), reader});
106 "Plugin [%] adds reader [%] to readers list\n",
108 readerSpi->getName());