OpenRTM
1.0.0
|
00001 // -*- C++ -*- 00020 #ifndef RTC_INPORTCORBACDRPROVIDER_H 00021 #define RTC_INPORTCORBACDRPROVIDER_H 00022 00023 #include <rtm/idl/DataPortSkel.h> 00024 #include <rtm/BufferBase.h> 00025 #include <rtm/InPortProvider.h> 00026 #include <rtm/CORBA_SeqUtil.h> 00027 #include <rtm/Manager.h> 00028 #include <rtm/ConnectorListener.h> 00029 #include <rtm/ConnectorBase.h> 00030 00031 #ifdef WIN32 00032 #pragma warning( disable : 4290 ) 00033 #endif 00034 00035 namespace RTC 00036 { 00061 class InPortCorbaCdrProvider 00062 : public InPortProvider, 00063 public virtual POA_OpenRTM::InPortCdr, 00064 public virtual PortableServer::RefCountServantBase 00065 { 00066 public: 00080 InPortCorbaCdrProvider(void); 00081 00095 virtual ~InPortCorbaCdrProvider(void); 00096 00124 virtual void init(coil::Properties& prop); 00125 00151 virtual void setBuffer(BufferBase<cdrMemoryStream>* buffer); 00152 00201 virtual void setListener(ConnectorInfo& info, 00202 ConnectorListeners* listeners); 00203 00228 virtual void setConnector(InPortConnector* connector); 00229 00247 virtual ::OpenRTM::PortStatus put(const ::OpenRTM::CdrData& data) 00248 throw (CORBA::SystemException); 00249 00250 private: 00258 ::OpenRTM::PortStatus 00259 convertReturn(BufferStatus::Enum status, 00260 const cdrMemoryStream& data); 00261 00262 00272 inline void onBufferWrite(const cdrMemoryStream& data) 00273 { 00274 m_listeners-> 00275 connectorData_[ON_BUFFER_WRITE].notify(m_profile, data); 00276 } 00277 00287 inline void onBufferFull(const cdrMemoryStream& data) 00288 { 00289 m_listeners-> 00290 connectorData_[ON_BUFFER_FULL].notify(m_profile, data); 00291 } 00292 00302 inline void onBufferWriteTimeout(const cdrMemoryStream& data) 00303 { 00304 m_listeners-> 00305 connectorData_[ON_BUFFER_WRITE_TIMEOUT].notify(m_profile, data); 00306 } 00307 00317 inline void onBufferWriteOverwrite(const cdrMemoryStream& data) 00318 { 00319 m_listeners-> 00320 connectorData_[ON_BUFFER_OVERWRITE].notify(m_profile, data); 00321 } 00322 00332 inline void onReceived(const cdrMemoryStream& data) 00333 { 00334 m_listeners-> 00335 connectorData_[ON_RECEIVED].notify(m_profile, data); 00336 } 00337 00347 inline void onReceiverFull(const cdrMemoryStream& data) 00348 { 00349 m_listeners-> 00350 connectorData_[ON_RECEIVER_FULL].notify(m_profile, data); 00351 } 00352 00360 inline void onReceiverTimeout(const cdrMemoryStream& data) 00361 { 00362 m_listeners-> 00363 connectorData_[ON_RECEIVER_TIMEOUT].notify(m_profile, data); 00364 } 00365 00373 inline void onReceiverError(const cdrMemoryStream& data) 00374 { 00375 m_listeners-> 00376 connectorData_[ON_RECEIVER_ERROR].notify(m_profile, data); 00377 } 00378 00379 private: 00380 CdrBufferBase* m_buffer; 00381 ::OpenRTM::InPortCdr_var m_objref; 00382 ConnectorListeners* m_listeners; 00383 ConnectorInfo m_profile; 00384 InPortConnector* m_connector; 00385 00386 }; // class InPortCorCdrbaProvider 00387 }; // namespace RTC 00388 00389 extern "C" 00390 { 00404 void InPortCorbaCdrProviderInit(void); 00405 }; 00406 00407 #ifdef WIN32 00408 #pragma warning( default : 4290 ) 00409 #endif 00410 00411 #endif // RTC_INPORTCORBACDRPROVIDER_H 00412