00001
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034 #ifndef RtcInPortBase_h
00035 #define RtcInPortBase_h
00036
00037 #include <ace/Thread_Manager.h>
00038 #include "rtm/RTC.h"
00039 #include "rtm/idl/RTCDataTypeSkel.h"
00040 #include "rtm/idl/RTCInPortSkel.h"
00041 #include "rtm/RtcRingBuffer.h"
00042 #include "rtm/RtcSubscriber.h"
00043
00044 namespace RTM
00045 {
00046
00068 class EXPORTS InPortBase :
00069 public POA_RTM::InPort,
00070 public PortableServer::RefCountServantBase
00071 {
00072 public:
00087 InPortBase()
00088 {
00089 ACE_TRACE("InPortBase::InPortBase(int)");
00090 m_Profile.name = _CORBA_String_helper::empty_string;
00091 };
00092
00107 virtual ~InPortBase(){};
00108
00109
00110
00111
00126 virtual void put(const CORBA::Any& value)
00127 throw (CORBA::SystemException, RTM::PortBase::Disconnected) = 0;
00128
00129
00141 virtual PortProfile* profile() throw (CORBA::SystemException);
00142
00143 virtual RtmRes subscribe(SubscriptionProfile& subs)
00144 throw (CORBA::SystemException, RTM::PortBase::InvalidSubscription);
00145 virtual RtmRes notify_subscribe(SubscriptionProfile& subs)
00146 throw (CORBA::SystemException, RTM::PortBase::InvalidSubscription);
00147 virtual RtmRes unsubscribe(const char* id)
00148 throw (CORBA::SystemException, RTM::PortBase::NoSubscription);
00149 virtual RtmRes notify_unsubscribe(const char* id)
00150 throw (CORBA::SystemException, RTM::PortBase::NoSubscription);
00151 virtual SubscriptionList* subscriptions();
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00174 const char* name(){return m_Profile.name;}
00175
00176
00193 virtual void read_pm() = 0;
00194
00195 virtual InPort_ptr getObjRef();
00196 virtual void setObjRef(InPort_ptr objref);
00197
00198 protected:
00206 PortProfile m_Profile;
00207
00216 typedef std::list<SubsProfileBase*>::iterator Subs_it;
00217 struct Subscribers
00218 {
00219 ACE_Thread_Mutex m_Mutex;
00220 std::list<SubsProfileBase*> m_List;
00221
00222 class eq_id
00223 {
00224 public:
00225 const std::string m_id;
00226 eq_id(const char* id) : m_id(id){};
00227 bool operator()(SubsProfileBase* subs);
00228 };
00229 Subs_it findById(const char* id);
00230 Subs_it eraseById(const char* id);
00231 };
00232 Subscribers m_Subscribers;
00233
00241 InPort_var m_thisObjRef;
00242
00243 };
00244
00245 };
00246
00247 #endif // RtcInPortBase_h