-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathLoggingObserver.cpp
More file actions
48 lines (36 loc) · 1.33 KB
/
LoggingObserver.cpp
File metadata and controls
48 lines (36 loc) · 1.33 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include "LoggingObserver.h"
#include <iostream>
// ---------------- Subject ----------------
Subject::Subject() { observers = new std::list<Observer*>; }
Subject::Subject(const Subject& other) {
observers = new std::list<Observer*>(*other.observers);
}
Subject& Subject::operator=(const Subject& other) {
if (this != &other) {
delete observers;
observers = new std::list<Observer*>(*other.observers);
}
return *this;
}
Subject::~Subject() { delete observers; }
void Subject::Attach(Observer* o) { observers->push_back(o); }
void Subject::Detach(Observer* o) { observers->remove(o); }
void Subject::Notify(ILoggable* loggable) const {
for (Observer* obs : *observers)
obs->Update(loggable);
}
// ---------------- LogObserver ----------------
LogObserver::LogObserver() {
logfile.open("gamelog.txt", std::ios::app);
if (!logfile.is_open())
std::cerr << "Error: could not open gamelog.txt\n";
}
LogObserver::~LogObserver() {
if (logfile.is_open())
logfile << "--------------------------------------------------------------------------------------------------\n";
logfile.close();
}
void LogObserver::Update(ILoggable* loggable) {
if (logfile.is_open() && loggable)
logfile << loggable->stringToLog() << std::endl;
}