|
UniSet
2.2.1
|
00001 // ------------------------------------------------------------------------- 00002 #ifndef LogSession_H_ 00003 #define LogSession_H_ 00004 // ------------------------------------------------------------------------- 00005 #include <string> 00006 #include <memory> 00007 #include <deque> 00008 #include <cc++/socket.h> 00009 #include <condition_variable> 00010 #include <mutex> 00011 #include "Mutex.h" 00012 #include "DebugStream.h" 00013 #include "LogAgregator.h" 00014 #include "PassiveTimer.h" 00015 // ------------------------------------------------------------------------- 00017 class LogSession: 00018 public std::enable_shared_from_this<LogSession>, 00019 public ost::TCPSession 00020 { 00021 public: 00022 00023 LogSession( ost::TCPSocket& server, std::shared_ptr<DebugStream>& log, timeout_t sessTimeout = 10000, timeout_t cmdTimeout = 2000, timeout_t outTimeout = 2000, timeout_t delay = 2000 ); 00024 virtual ~LogSession(); 00025 00026 typedef sigc::slot<void, std::shared_ptr<LogSession>> FinalSlot; 00027 void connectFinalSession( FinalSlot sl ); 00028 00029 inline void cancel() 00030 { 00031 cancelled = true; 00032 } 00033 inline std::string getClientAddress() 00034 { 00035 return caddr; 00036 } 00037 00038 inline void setSessionLogLevel( Debug::type t ) 00039 { 00040 slog.level(t); 00041 } 00042 inline void addSessionLogLevel( Debug::type t ) 00043 { 00044 slog.addLevel(t); 00045 } 00046 inline void delSessionLogLevel( Debug::type t ) 00047 { 00048 slog.delLevel(t); 00049 } 00050 00051 protected: 00052 LogSession( ost::TCPSocket& server ); 00053 00054 virtual void run(); 00055 virtual void final(); 00056 void logOnEvent( const std::string& s ); 00057 void readStream(); 00058 00059 // msec 00060 timeout_t sessTimeout = { 10000 }; 00061 timeout_t cmdTimeout = { 2000 }; 00062 timeout_t outTimeout = { 2000 }; 00063 timeout_t delayTime = { 2000 }; 00064 00065 private: 00066 typedef std::deque<std::string> LogBuffer; 00067 LogBuffer lbuf; 00068 std::string peername = { "" }; 00069 std::string caddr = { "" }; 00070 std::shared_ptr<DebugStream> log; 00071 std::shared_ptr<LogAgregator> alog; 00072 sigc::connection conn; 00073 00074 std::shared_ptr<LogSession> myptr; 00075 00076 // PassiveTimer ptSessionTimeout; 00077 FinalSlot slFin; 00078 std::atomic_bool cancelled = { false }; 00079 00080 DebugStream slog; 00081 std::ostringstream sbuf; 00082 00083 std::mutex log_mutex; 00084 std::condition_variable log_event; 00085 std::atomic_bool log_notify = ATOMIC_VAR_INIT(0); 00086 }; 00087 // ------------------------------------------------------------------------- 00089 class NullLogSession: 00090 public ost::Thread 00091 { 00092 public: 00093 00094 NullLogSession( const std::string& _msg ); 00095 ~NullLogSession(); 00096 00097 void add( ost::TCPSocket& server ); 00098 void setMessage( const std::string& _msg ); 00099 00100 inline void cancel() 00101 { 00102 cancelled = true; 00103 } 00104 00105 protected: 00106 00107 virtual void run(); 00108 virtual void final(); 00109 00110 private: 00111 std::string msg; 00112 00113 typedef std::list< std::shared_ptr<ost::TCPStream> > TCPStreamList; 00114 TCPStreamList slist; 00115 UniSetTypes::uniset_rwmutex smutex; 00116 std::atomic_bool cancelled; 00117 }; 00118 // ------------------------------------------------------------------------- 00119 #endif // LogSession_H_ 00120 // -------------------------------------------------------------------------
1.7.6.1