00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef ORO_COMP_TCP_DATASENDER
00030 #define ORO_COMP_TCP_DATASENDER
00031
00032 #include <rtt/NonPeriodicActivity.hpp>
00033 #include <rtt/os/Mutex.hpp>
00034 #include <rtt/Property.hpp>
00035
00036 using RTT::OS::Mutex;
00037 using RTT::PropertyBase;
00038 using RTT::Property;
00039 using RTT::PropertyBag;
00040
00041 namespace RTT
00042 {
00043 class SocketMarshaller;
00044 }
00045 namespace OCL{
00046
00047 namespace TCP{
00048 class TcpReportingInterpreter;
00049 class Socket;
00050
00058 class Datasender
00059 : public RTT::NonPeriodicActivity
00060 {
00061 private:
00062 Mutex lock;
00063 TcpReportingInterpreter* interpreter;
00064 void checkbag(const PropertyBag &v);
00065 void writeOut(PropertyBase* v);
00066 void writeOut(const PropertyBag &v);
00067 Socket* os;
00068 OCL::TcpReporting* reporter;
00069 unsigned long long limit;
00070 unsigned long long curframe;
00071 bool silenced;
00072 RTT::SocketMarshaller* marshaller;
00073 std::vector<std::string> subscriptions;
00074
00075 public:
00076 Datasender(RTT::SocketMarshaller* marshaller, Socket* os);
00077 virtual ~Datasender();
00078
00083 bool isValid() const;
00084
00088 void setLimit(unsigned long long newlimit);
00089
00093 void serialize(const PropertyBag &v);
00094
00098 RTT::SocketMarshaller* getMarshaller() const;
00099
00100 bool addSubscription(const std::string name );
00101 bool removeSubscription( const std::string& name );
00102
00106 void listSubscriptions();
00107
00111 Socket& getSocket() const;
00112
00116 virtual void loop();
00117
00121 virtual bool breakloop();
00122
00126 void silence(bool newstate);
00127
00131 void remove();
00132 };
00133 }
00134 }
00135 #endif