00001
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 {
00062 class InPortCorbaCdrProvider
00063 : public InPortProvider,
00064 public virtual POA_OpenRTM::InPortCdr,
00065 public virtual PortableServer::RefCountServantBase
00066 {
00067 public:
00093 InPortCorbaCdrProvider(void);
00094
00108 virtual ~InPortCorbaCdrProvider(void);
00109
00124 virtual void init(coil::Properties& prop);
00125
00141 virtual void setBuffer(BufferBase<cdrMemoryStream>* buffer);
00142
00150 virtual void setListener(ConnectorInfo& info,
00151 ConnectorListeners* listeners);
00159 virtual void setConnector(InPortConnector* connector);
00160
00178 virtual ::OpenRTM::PortStatus put(const ::OpenRTM::CdrData& data)
00179 throw (CORBA::SystemException);
00180
00181 private:
00189 ::OpenRTM::PortStatus
00190 convertReturn(BufferStatus::Enum status,
00191 const cdrMemoryStream& data);
00192
00193
00197 inline void onBufferWrite(const cdrMemoryStream& data)
00198 {
00199 m_listeners->
00200 connectorData_[ON_BUFFER_WRITE].notify(m_profile, data);
00201 }
00202
00203 inline void onBufferFull(const cdrMemoryStream& data)
00204 {
00205 m_listeners->
00206 connectorData_[ON_BUFFER_FULL].notify(m_profile, data);
00207 }
00208
00209 inline void onBufferWriteTimeout(const cdrMemoryStream& data)
00210 {
00211 m_listeners->
00212 connectorData_[ON_BUFFER_WRITE_TIMEOUT].notify(m_profile, data);
00213 }
00214
00215 inline void onBufferWriteOverwrite(const cdrMemoryStream& data)
00216 {
00217 m_listeners->
00218 connectorData_[ON_BUFFER_OVERWRITE].notify(m_profile, data);
00219 }
00220
00221
00222
00223
00224
00225
00226
00227
00228
00229
00230
00231
00232
00233 inline void onReceived(const cdrMemoryStream& data)
00234 {
00235 m_listeners->
00236 connectorData_[ON_RECEIVED].notify(m_profile, data);
00237 }
00238
00239 inline void onReceiverFull(const cdrMemoryStream& data)
00240 {
00241 m_listeners->
00242 connectorData_[ON_RECEIVER_FULL].notify(m_profile, data);
00243 }
00244
00245 inline void onReceiverTimeout(const cdrMemoryStream& data)
00246 {
00247 m_listeners->
00248 connectorData_[ON_RECEIVER_TIMEOUT].notify(m_profile, data);
00249 }
00250
00251 inline void onReceiverError(const cdrMemoryStream& data)
00252 {
00253 m_listeners->
00254 connectorData_[ON_RECEIVER_ERROR].notify(m_profile, data);
00255 }
00256
00260
00261
00262
00263
00264
00265
00266
00267
00268
00269
00270
00271
00272
00273
00274
00275
00276
00277
00278
00279
00280
00281
00282
00283
00284
00285
00286
00287
00288
00289
00290
00291
00292 private:
00293 CdrBufferBase* m_buffer;
00294 ::OpenRTM::InPortCdr_var m_objref;
00295 ConnectorListeners* m_listeners;
00296 ConnectorInfo m_profile;
00297 InPortConnector* m_connector;
00298
00299 };
00300 };
00301
00302 extern "C"
00303 {
00304 void InPortCorbaCdrProviderInit(void);
00305 };
00306
00307 #ifdef WIN32
00308 #pragma warning( default : 4290 )
00309 #endif
00310
00311 #endif // RTC_INPORTCORBACDRPROVIDER_H
00312