Skip to content
Snippets Groups Projects
Commit 37b596db authored by Armin Co's avatar Armin Co
Browse files

Added observer log.

parent 3b3202e0
Branches
No related tags found
No related merge requests found
...@@ -34,6 +34,7 @@ include_directories(src/smart_grid) ...@@ -34,6 +34,7 @@ include_directories(src/smart_grid)
add_executable(smart_grid.exe add_executable(smart_grid.exe
src/smg_server.cpp src/smg_server.cpp
src/smart_grid/SmartGridModell.cpp src/smart_grid/SmartGridModell.cpp
src/smart_grid/StateLogger.cpp
src/i2c/Node.cpp src/i2c/Node.cpp
src/com/Socket.cpp src/com/Socket.cpp
src/com/Protocol.cpp src/com/Protocol.cpp
......
...@@ -14,22 +14,23 @@ public: ...@@ -14,22 +14,23 @@ public:
virtual void update(const T &subject) = 0; virtual void update(const T &subject) = 0;
}; };
template<typename T> template<typename Observer, typename Value>
class Subject class Subject
{ {
public: public:
virtual ~Subject() = default; virtual ~Subject() = default;
void attach(std::shared_ptr<IObserver<T>> observer){ void attach(std::shared_ptr<Observer> observer){
m_observers.push_back(observer); m_observers.push_back(observer);
} }
void notify() const{ protected:
for (auto &observer : m_observers){ void notify(const Value &value) const{
observer.update(this); for (auto observer : m_observers){
observer->update(value);
} }
} }
private: private:
std::vector<std::shared_ptr<IObserver<T>>> m_observers; std::vector<std::shared_ptr<Observer>> m_observers;
}; };
#endif #endif
\ No newline at end of file
...@@ -114,4 +114,5 @@ void ModelState::next_hour() ...@@ -114,4 +114,5 @@ void ModelState::next_hour()
update_power_production(); update_power_production();
update_modell(); update_modell();
print_states(); print_states();
notify(*this);
} }
\ No newline at end of file
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
#include "SmartGridModell.hpp" #include "SmartGridModell.hpp"
#include "ObserverPattern.hpp" #include "ObserverPattern.hpp"
#include "StateLogger.hpp"
struct MaxPower struct MaxPower
{ {
static constexpr double village = 600; static constexpr double village = 600;
...@@ -58,13 +59,17 @@ struct PowerUsage ...@@ -58,13 +59,17 @@ struct PowerUsage
}; };
class ModelState : Subject<ModelState> class StateLogger;
class ModelState : Subject<StateLogger, ModelState>
{ {
public: public:
ModelState(SmartGridModell &modell); ModelState(SmartGridModell &modell);
void next_hour(); void next_hour();
double excess_power(); double excess_power();
PowerProduction getPowerProduction() const {return m_production;}
PowerUsage getPowerUsage() const {return m_usage;}
private: private:
void update_time(); void update_time();
void update_sun(); void update_sun();
......
///
#include "StateLogger.hpp"
void StateLogger::update(const ModelState &model)
{
spdlog::debug("Clean solar power: {}", model.getPowerProduction().renewable.solar);
}
\ No newline at end of file
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
#include "ModelState.hpp" #include "ModelState.hpp"
#include "ObserverPattern.hpp" #include "ObserverPattern.hpp"
class ModelState;
class StateLogger : IObserver<ModelState> class StateLogger : IObserver<ModelState>
{ {
public: public:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment