00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include "logserver.h"
00023 #include "logserverstreambuf.h"
00024 #include <stdarg.h>
00025
00026 using namespace std;
00027 using namespace zeitgeist;
00028
00029 LogServer::LogServer(unsigned int size) :
00030 Node(), ostream(new LogServerStreamBuf(size))
00031 {
00032 }
00033
00034 LogServer::~LogServer()
00035 {
00036 flush();
00037
00038
00039 delete rdbuf();
00040 }
00041
00042 void LogServer::AddStream(std::ostream* stream, unsigned int mask)
00043 {
00044 GetStreamBuf().AddStream(stream, mask);
00045 }
00046
00047 bool LogServer::RemoveStream(const std::ostream* stream)
00048 {
00049 return GetStreamBuf().RemoveStream(stream);
00050 }
00051
00052 unsigned int LogServer::GetPriorityMask(const std::ostream* stream) const
00053 {
00054 return GetStreamBuf().GetPriorityMask(stream);
00055 }
00056
00057 bool LogServer::SetPriorityMask(const std::ostream* stream, unsigned int mask)
00058 {
00059 return GetStreamBuf().SetPriorityMask(stream, mask);
00060 }
00061
00062 LogServer& LogServer::Priority(unsigned int prio)
00063 {
00064 GetStreamBuf().SetCurrentPriority(prio);
00065 return *this;
00066 }
00067
00068 void
00069 LogServer::Printf(const char *inFormat, ...)
00070 {
00071 const int size = 4096;
00072 char copyBuffer[size];
00073 va_list args;
00074 va_start(args, inFormat);
00075 if (vsnprintf(copyBuffer, size, inFormat, args) == size)
00076 {
00077 copyBuffer[size-1] = 0;
00078 }
00079 va_end(args);
00080 (*this) << copyBuffer;
00081 this->flush();
00082 }
00083
00084 const LogServerStreamBuf& LogServer::GetStreamBuf() const
00085 {
00086 LogServerStreamBuf* streamBuf = (LogServerStreamBuf*)(rdbuf());
00087 return *streamBuf;
00088 }
00089
00090 LogServerStreamBuf& LogServer::GetStreamBuf()
00091 {
00092 LogServerStreamBuf* streamBuf = (LogServerStreamBuf*)(rdbuf());
00093 return *streamBuf;
00094 }