From 37b596db3747628cc74066bfccca543fb8c7cfb2 Mon Sep 17 00:00:00 2001 From: Armin Co <armin.co@hs-bochum.de> Date: Sun, 4 Oct 2020 18:40:00 +0200 Subject: [PATCH] Added observer log. --- CMakeLists.txt | 1 + src/observ/ObserverPattern.hpp | 13 +++++++------ src/smart_grid/ModelState.cpp | 1 + src/smart_grid/ModelState.hpp | 7 ++++++- src/smart_grid/StateLogger.cpp | 8 ++++++++ src/smart_grid/StateLogger.hpp | 1 + 6 files changed, 24 insertions(+), 7 deletions(-) create mode 100644 src/smart_grid/StateLogger.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 96c755b..1987450 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -34,6 +34,7 @@ include_directories(src/smart_grid) add_executable(smart_grid.exe src/smg_server.cpp src/smart_grid/SmartGridModell.cpp + src/smart_grid/StateLogger.cpp src/i2c/Node.cpp src/com/Socket.cpp src/com/Protocol.cpp diff --git a/src/observ/ObserverPattern.hpp b/src/observ/ObserverPattern.hpp index fe79426..300d829 100644 --- a/src/observ/ObserverPattern.hpp +++ b/src/observ/ObserverPattern.hpp @@ -14,22 +14,23 @@ public: virtual void update(const T &subject) = 0; }; -template<typename T> +template<typename Observer, typename Value> class Subject { public: virtual ~Subject() = default; - void attach(std::shared_ptr<IObserver<T>> observer){ + void attach(std::shared_ptr<Observer> observer){ m_observers.push_back(observer); } - void notify() const{ - for (auto &observer : m_observers){ - observer.update(this); +protected: + void notify(const Value &value) const{ + for (auto observer : m_observers){ + observer->update(value); } } private: - std::vector<std::shared_ptr<IObserver<T>>> m_observers; + std::vector<std::shared_ptr<Observer>> m_observers; }; #endif \ No newline at end of file diff --git a/src/smart_grid/ModelState.cpp b/src/smart_grid/ModelState.cpp index 6e5bf82..3bcd87c 100644 --- a/src/smart_grid/ModelState.cpp +++ b/src/smart_grid/ModelState.cpp @@ -114,4 +114,5 @@ void ModelState::next_hour() update_power_production(); update_modell(); print_states(); + notify(*this); } \ No newline at end of file diff --git a/src/smart_grid/ModelState.hpp b/src/smart_grid/ModelState.hpp index 7026932..5e72dd0 100644 --- a/src/smart_grid/ModelState.hpp +++ b/src/smart_grid/ModelState.hpp @@ -11,6 +11,7 @@ #include "SmartGridModell.hpp" #include "ObserverPattern.hpp" +#include "StateLogger.hpp" struct MaxPower { static constexpr double village = 600; @@ -58,13 +59,17 @@ struct PowerUsage }; -class ModelState : Subject<ModelState> +class StateLogger; +class ModelState : Subject<StateLogger, ModelState> { public: ModelState(SmartGridModell &modell); void next_hour(); double excess_power(); + PowerProduction getPowerProduction() const {return m_production;} + PowerUsage getPowerUsage() const {return m_usage;} + private: void update_time(); void update_sun(); diff --git a/src/smart_grid/StateLogger.cpp b/src/smart_grid/StateLogger.cpp new file mode 100644 index 0000000..2aee2ea --- /dev/null +++ b/src/smart_grid/StateLogger.cpp @@ -0,0 +1,8 @@ +/// + +#include "StateLogger.hpp" + +void StateLogger::update(const ModelState &model) +{ + spdlog::debug("Clean solar power: {}", model.getPowerProduction().renewable.solar); +} \ No newline at end of file diff --git a/src/smart_grid/StateLogger.hpp b/src/smart_grid/StateLogger.hpp index 2ab362f..96ded40 100644 --- a/src/smart_grid/StateLogger.hpp +++ b/src/smart_grid/StateLogger.hpp @@ -6,6 +6,7 @@ #include "ModelState.hpp" #include "ObserverPattern.hpp" +class ModelState; class StateLogger : IObserver<ModelState> { public: -- GitLab