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/Activity.hpp>
00033 #include <rtt/os/Mutex.hpp>
00034 #include <rtt/Property.hpp>
00035
00036 using RTT::os::Mutex;
00037 using RTT::base::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 using namespace RTT;
00049 class TcpReportingInterpreter;
00050 class Socket;
00051
00059 class Datasender
00060 : public RTT::Activity
00061 {
00062 private:
00063 os::Mutex lock;
00064 TcpReportingInterpreter* interpreter;
00065 void checkbag(const PropertyBag &v);
00066 void writeOut(base::PropertyBase* v);
00067 void writeOut(const PropertyBag &v);
00068 Socket* os;
00069 OCL::TcpReporting* reporter;
00070 unsigned long long limit;
00071 unsigned long long curframe;
00072 bool silenced;
00073 RTT::SocketMarshaller* marshaller;
00074 std::vector<std::string> subscriptions;
00075
00076 public:
00077 Datasender(RTT::SocketMarshaller* marshaller, Socket* os);
00078 virtual ~Datasender();
00079
00084 bool isValid() const;
00085
00089 void setLimit(unsigned long long newlimit);
00090
00094 void serialize(const PropertyBag &v);
00095
00099 RTT::SocketMarshaller* getMarshaller() const;
00100
00101 bool addSubscription(const std::string name );
00102 bool removeSubscription( const std::string& name );
00103
00107 void listSubscriptions();
00108
00112 Socket& getSocket() const;
00113
00117 virtual void loop();
00118
00122 virtual bool breakloop();
00123
00127 void silence(bool newstate);
00128
00132 void remove();
00133 };
00134 }
00135 }
00136 #endif