14#include "keyple/core/service/AbstractObservableLocalPluginAdapter.hpp"
21#include "keyple/core/service/PluginEventAdapter.hpp"
22#include "keyple/core/util/cpp/KeypleStd.hpp"
23#include "keyple/core/util/cpp/exception/Exception.hpp"
29using keyple::core::util::cpp::exception::Exception;
34AbstractObservableLocalPluginAdapter::ObservableLocalPluginAdapterJob ::
35 ObservableLocalPluginAdapterJob(
36 std::shared_ptr<PluginObserverSpi> observer,
37 const std::shared_ptr<PluginEvent> event,
38 AbstractObservableLocalPluginAdapter* parent)
39: Job(
"AbstractObservableLocalPluginAdapter")
47AbstractObservableLocalPluginAdapter::ObservableLocalPluginAdapterJob::execute()
49 mParent->notifyObserver(mObserver, mEvent);
55AbstractObservableLocalPluginAdapter::AbstractObservableLocalPluginAdapter(
56 std::shared_ptr<PluginSpi> pluginSpi)
57: LocalPluginAdapter(pluginSpi)
59 std::make_shared<ObservationManagerAdapter<
61 PluginObservationExceptionHandlerSpi>>(
"",
""))
65std::shared_ptr<ObservationManagerAdapter<
67 PluginObservationExceptionHandlerSpi>>
68AbstractObservableLocalPluginAdapter::getObservationManager()
const
70 return mObservationManager;
74AbstractObservableLocalPluginAdapter::notifyObservers(
75 const std::shared_ptr<PluginEvent> event)
78 "[plugin=%] Notifying observers [eventType=%, readerNames=%, "
82 event->getReaderNames(),
85 for (
const auto& observer : mObservationManager->getObservers()) {
86 notifyObserver(observer, event);
89 mLogger->debug(
"[plugin=%] Observers notified\n", getName());
93AbstractObservableLocalPluginAdapter::notifyObserver(
94 std::shared_ptr<PluginObserverSpi> observer,
95 const std::shared_ptr<PluginEvent> event)
98 observer->onPluginEvent(event);
100 }
catch (
const Exception& e) {
101 auto _e(std::unique_ptr<Exception>(
new Exception(e)));
103 mObservationManager->getObservationExceptionHandler()
104 ->onPluginObservationError(getName(), std::move(_e));
106 }
catch (
const Exception& e2) {
108 "[plugin=%] Failed to notify observer [reason=%]\n",
112 "[plugin=%] Failed to notify observation exception handler "
121AbstractObservableLocalPluginAdapter::doUnregister()
123 const std::vector<std::string>& unregisteredReaderNames = getReaderNames();
126 std::make_shared<PluginEventAdapter>(
128 unregisteredReaderNames,
129 PluginEvent::Type::UNAVAILABLE));
132 LocalPluginAdapter::doUnregister();
136AbstractObservableLocalPluginAdapter::addObserver(
137 const std::shared_ptr<PluginObserverSpi> observer)
140 mObservationManager->addObserver(observer);
144AbstractObservableLocalPluginAdapter::removeObserver(
145 const std::shared_ptr<PluginObserverSpi> observer)
147 Assert::getInstance().notNull(observer,
"observer");
149 const auto& observers = mObservationManager->getObservers();
150 const auto it = std::find(observers.begin(), observers.end(), observer);
152 if (it != observers.end()) {
153 mObservationManager->removeObserver(observer);
158AbstractObservableLocalPluginAdapter::clearObservers()
160 mObservationManager->clearObservers();
164AbstractObservableLocalPluginAdapter::countObservers()
const
166 return mObservationManager->countObservers();
170AbstractObservableLocalPluginAdapter::setPluginObservationExceptionHandler(
171 std::shared_ptr<PluginObservationExceptionHandlerSpi> exceptionHandler)
174 mObservationManager->setObservationExceptionHandler(exceptionHandler);