00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018                                                                                                 
00019 
00020 #ifndef _RLogNode_incl_
00021 #define _RLogNode_incl_
00022 
00023 #include <list>
00024 #include <set>
00025 #include <time.h>
00026 #include <string>
00027 
00028 #include <rlog/common.h>
00029 #include <rlog/Mutex.h>
00030 
00031 namespace rlog
00032 {
00033     class RLOG_DECL RLogNode;
00034 
00047     struct RLOG_DECL RLogData
00048     {
00049         struct PublishLoc *publisher;
00051         time_t time;
00053         const char *msg; 
00054 
00055         
00056         
00057         
00058         std::set< RLogNode * > seen;
00059     };
00060 
00061     
00062     class RLogNode
00063     {
00064     public:
00065         RLogNode();
00066         virtual ~RLogNode();
00067 
00068         
00069         virtual void clear();
00070 
00071         virtual void publish( const RLogData &data );
00072 
00073         
00074         virtual void addPublisher( RLogNode * );
00075         virtual void dropPublisher( RLogNode *, bool callbacks=true );
00076 
00077         bool enabled() const;
00078 
00079         
00080         virtual void addSubscriber( RLogNode * );
00081         virtual void dropSubscriber( RLogNode * );
00082 
00083         virtual void isInterested( RLogNode *node, bool isInterested );
00084 
00085     protected:
00086         
00087         virtual void setEnabled(bool newState);
00088 
00090         std::list< RLogNode * > publishers;
00091 
00093         std::list< RLogNode * > subscribers;
00094 
00096         std::list< RLogNode * > interestList;
00097 
00098         Mutex mutex;
00099     };
00100 }
00101 
00102 #endif
00103