00001 00030 #ifndef _LOGGERTRANSPORT_H 00031 #define _LOGGERTRANSPORT_H 00032 #include <WritableType.H> 00033 #include <Capability.H> 00034 #include <COMObject.H> 00035 #include <queue> 00036 #include <vector> 00037 00038 // $Id: Type.H 66 2007-01-23 20:53:23Z fwph $ 00039 00040 #define LOGGERTRANSPORT "LoggerTransport" 00041 // IDNUMBER is used to identify data events . IDNUMBER+1 is the info event. this 00042 // system will probably go away soon... 00043 //#define LOGGERTRANSPORTIDNUMBER 16 00044 00045 namespace WURDE { 00046 class Capability; 00047 class CommsManager; 00048 class Logger; 00049 00050 00051 00052 00053 class LoggerTransportInfoStruct { 00054 public: std::string source; 00055 std::string target; 00056 Time timestamp; 00057 MessageType mType; 00058 }; 00059 00060 00061 class LoggerTransportDataStruct { 00062 public: int priority; 00063 std::string source; 00064 std::vector< char > logData; 00065 Time timestamp; 00066 std::string logFormat; 00067 std::string logString; 00068 }; 00069 00075 class LoggerTransport : virtual public Capability { 00076 00077 public: 00083 explicit LoggerTransport(const std::string & streamname); 00084 00090 LoggerTransport(const ConnectionStrategy & strategy,const std::string & gblName); 00091 00097 LoggerTransport(const std::string & streamname,const std::string & gblName); 00098 00099 ~LoggerTransport(); 00100 00101 00105 void init(const std::string & streamname,const ConnectionStrategy & strategy, const std::string & gblName); 00106 00107 00112 LoggerTransportDataStruct data; 00113 00117 LoggerTransportInfoStruct info; 00118 00122 LoggerTransportInfoStruct requests; 00123 00124 //RobotObject imps 00125 void runUpdate(); 00126 void setManager(CommsManager *myManager_); 00127 void setCOMObject(COMBase *object){ myCOMObject = dynamic_cast<COMObject<LoggerTransportInfoStruct,LoggerTransportDataStruct> *> (object);} 00128 void disconnect(){if(myCOMObject){myCOMObject->disconnect();}} 00129 void activateSupplier(); 00130 void activateConsumer(); 00131 std::string getInterfaceName(){ return LOGGERTRANSPORT;} 00132 void setStreamName(const std::string & name); 00133 void setGlobalName(const std::string & name); 00134 bool newData(); 00135 bool newInfo(); 00136 void setAutoPing(const bool & val); 00137 void doPing(); 00138 // int getID(){return LOGGERTRANSPORTIDNUMBER;} 00139 00143 bool getQueueMode(){return m_queue;}; 00144 00148 void setQueueMode(const bool & val); 00149 00154 LoggerTransportDataStruct getNextData(); 00155 00160 LoggerTransportInfoStruct getNextInfo(); 00161 00165 LoggerTransportInfoStruct getNextRequest(){return getNextInfo();} 00166 00167 void publishData(); 00168 void publishInfo(); 00169 //void publishRequest(); 00170 00171 protected: 00172 COMObject<LoggerTransportInfoStruct, LoggerTransportDataStruct> *myCOMObject; 00173 00174 bool m_queue; 00175 00176 //notes that the object should be initialized as soon as a streamname is received 00177 bool m_initialize; 00178 std::queue<LoggerTransportDataStruct> m_dataVector; 00179 std::queue<LoggerTransportInfoStruct> m_infoVector; 00180 std::queue<LoggerTransportInfoStruct> m_requestVector; 00181 00182 }; 00183 00184 } 00185 00186 00187 #endif