-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathLogger.cpp
58 lines (44 loc) · 1.27 KB
/
Logger.cpp
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
49
50
51
52
53
54
55
56
57
58
#include "Logger.h"
#include "Client.h"
Logger::Logger() {
_bufferIndex = 0;
_top0 = 0;
_top1 = 0;
pthread_mutex_init(&_logMutex, NULL);
}
Logger::~Logger() {
}
void Logger::writeBuffer(string (&handleBuffer)[LOGBUFFERSIZE], unsigned int& handleTop) {
if(handleTop > 0) {
for(int i = 0; i < handleTop; ++i) {
cout << handleBuffer[i] << endl;
}
handleTop = 0;
}
}
// TODO: will fail if logging takes more than 1 second.
void Logger::run() {
while(1) {
pthread_mutex_lock(&_logMutex);
// Take note of the buffer index, then toggle it.
unsigned int handleIndex = _bufferIndex;
_bufferIndex = 1 - _bufferIndex;
pthread_mutex_unlock(&_logMutex);
// TODO: some sort of array index.
if(handleIndex == 1) {
writeBuffer(_buffer0, _top0);
} else {
writeBuffer(_buffer1, _top1);
}
// cout << "handle: " << handleIndex << " new buffer: " << _bufferIndex << " " << endl;
sleep(2);
}
}
void Logger::log(string str) {
pthread_mutex_lock(&_logMutex);
if(_bufferIndex == 0)
_buffer0[_top0++] = str;
else
_buffer1[_top1++] = str;
pthread_mutex_unlock(&_logMutex);
}