00001
00021 #ifndef __RtcOutPortBase_h__
00022 #define __RtcOutPortBase_h__
00023
00024 #include <list>
00025 #include <ace/Task.h>
00026
00027 #include "rtm/RTC.h"
00028 #include "rtm/idl/RTCDataTypeSkel.h"
00029 #include "rtm/idl/RTCOutPortSkel.h"
00030 #include "rtm/idl/RTCOutPortStub.h"
00031 #include "rtm/RtcInPortBase.h"
00032 #include "rtm/RtcRingBuffer.h"
00033
00034
00035 namespace RTM {
00036 class SubscriberBase;
00037 using namespace std;
00038
00060 class OutPortBase :
00061 public POA_RTM::OutPort,
00062 public PortableServer::RefCountServantBase
00063 {
00064 public:
00079 OutPortBase(){};
00080
00095 virtual ~OutPortBase(){};
00096
00097
00098
00099
00111 virtual CORBA::Any* get() throw (CORBA::SystemException) = 0;
00112
00114
00115
00127 virtual RtmRes subscribe(InPort_ptr in_port, SubscriptionID_out id,
00128 const SubscriberProfile &profile)
00129 throw (CORBA::SystemException);
00130
00142 virtual RtmRes unsubscribe(const char* id) throw (CORBA::SystemException);
00143
00155 virtual InPortList* inports() throw (CORBA::SystemException);
00156
00168 virtual PortProfile* profile() throw (CORBA::SystemException);
00169
00170
00171
00172
00184
00185 virtual RtmRes push(const InPort_ptr& inport, std::string subsid) = 0;
00186
00198 virtual void updateall();
00199
00211 virtual const char* name() {return m_Profile.name;};
00212
00213 protected:
00221
00222 struct Subscribers
00223 {
00224 ACE_Thread_Mutex m_Mutex;
00225 list<SubscriberBase*> m_List;
00226 };
00227 Subscribers m_Subscribers;
00228
00229
00237 PortProfile m_Profile;
00238
00239 };
00240
00241
00242
00243 };
00244
00245 #endif // End of ifndef __RtcOutPortBase_h__