00001 /****************************************************************************** 00002 ** Copyright (c) 1992-2010 VT MAK 00003 ** All rights reserved. 00004 ******************************************************************************/ 00005 00008 00009 #ifndef messageOutput_H_ 00010 #define messageOutput_H_ 00011 00012 #include "lgrCore.h" 00013 00014 #include "observeEvent.h" 00015 #include "absoluteTime.h" 00016 00017 #include <set> 00018 00019 namespace MAKLogger 00020 { 00021 template<typename T> class DtCollector; 00022 class DtMessageBuffer; 00023 class DtMessageFilter; 00024 class DtMessageIOInfo; 00025 class DtPacket; 00026 class DtMessageInput; 00027 00030 class DT_DLL_LGRCORE DtMessageOutput 00031 { 00032 public: 00034 DtMessageOutput(); 00035 00037 virtual ~DtMessageOutput(); 00038 00039 private: 00041 DtMessageOutput(const DtMessageOutput&); 00043 DtMessageOutput& operator=(const DtMessageOutput&); 00044 public: 00045 00047 virtual void activate(const DtMessageInput* fileInput) = 0; 00048 00050 virtual bool isActivated() const = 0; 00051 00053 virtual void deactivate() = 0; 00054 00057 00058 virtual void setSourceTime(const DtAbsoluteTime& sourceTime, bool inclusive); 00059 virtual DtAbsoluteTime sourceTime() const; 00061 00063 virtual bool sourceTimeInclusive() const; 00064 00068 virtual void outputMessages(const DtMessageBuffer& buffer); 00069 00071 virtual void outputMessage(const DtPacket* packet); 00072 00076 virtual bool outputPacket(const DtPacket& packet) = 0; 00077 00080 virtual void filterMessages(DtMessageBuffer& buffer); 00081 00083 virtual void filterMessage(DtPacket* packet) = 0; 00085 virtual void filterMessageAllowingCheckpoints(DtPacket* packet); 00086 00088 virtual const DtMessageIOInfo* info() const = 0; 00089 00091 virtual void flush() = 0; 00092 00094 virtual void setOutputScaling(double scaling, bool enableStatic) = 0; 00095 00097 virtual void setSendImmediate(bool enable); 00098 00100 virtual void setSendRetained(bool enable); 00101 00103 void attachFilter(DtMessageFilter*); 00104 00106 void detachFilter(DtMessageFilter*); 00107 00109 void filters(DtCollector<DtMessageFilter*> filterCollection) const; 00110 00112 DtObserveEvent<DtPacket>* preOutputPacketEvent(); 00113 00115 DtObserveEvent<DtPacket>* postOutputPacketEvent(); 00116 00118 DtObserveEvent<DtPacket>* packetFilteredEvent(); 00119 00120 protected: 00121 std::set<DtMessageFilter*> myFilters; 00122 00124 DtObserveEvent<DtPacket> myPreOutputPacketEvent; 00125 00127 DtObserveEvent<DtPacket> myPostOutputPacketEvent; 00128 00130 DtObserveEvent<DtPacket> myFilteredPacketEvent; 00131 00133 bool mySendImmediateFlag; 00134 00136 bool mySendRetainedFlag; 00137 00139 DtAbsoluteTime mySourceTime; 00140 00142 bool mySourceTimeBoundary; 00143 00144 }; 00145 00146 } 00147 00148 #endif 00149