diff --git a/CMakeLists.txt b/CMakeLists.txt index 96c755bad5b9cee3d30ba8714a772008502ef5ed..1987450e7ed2fede863b9a58b8bb5e53bd76049d 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 fe79426d4d7a5b9373a73e4a42ff70d37b3cb34a..300d8292182874b5c51e6c65a4101cb01375092e 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 6e5bf829f21da4058dfdba892496d867f927fb95..3bcd87c43575175a878fd3fb825acbe722171ab6 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 70269324603161beef214a11cd4b90fcb49b676d..5e72dd03a34526a591e4d2f7ae53cef7bc092d4a 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 0000000000000000000000000000000000000000..2aee2ea8d4f259f84cb5406da2c02e8473ff330d --- /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 2ab362f9d1e8ee0f2a43b9517eccccadc7bb9ed6..96ded4065194c8ca621ca23f60e7c6ffd66ce811 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: