Go to the documentation of this file.00001 #ifndef _BULKDATA_DISTRIBUTER_IMPL_H
00002 #define _BULKDATA_DISTRIBUTER_IMPL_H
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
00030
00031
00032
00033
00034
00035
00036 #ifndef __cplusplus
00037 #error This is a C++ include file and cannot be used from plain C
00038 #endif
00039
00040 #include <baci.h>
00041 #include <baciCharacteristicComponentImpl.h>
00042 #include <maciHelper.h>
00043 #include <maciContainerServices.h>
00044
00045 #include <ace/Pair_T.h>
00046
00047 #include "bulkDataDistributerS.h"
00048 #include "bulkDataDistributer.h"
00049
00050
00051
00052 #include "ACSBulkDataStatus.h"
00053
00054
00055 template<class TReceiverCallback, class TSenderCallback>
00056 class BulkDataDistributerNotifCb;
00057
00080 template<class TReceiverCallback, class TSenderCallback = BulkDataSenderDefaultCallback>
00081 class BulkDataDistributerImpl : public baci::CharacteristicComponentImpl,
00082 public virtual POA_bulkdata::BulkDataDistributer
00083 {
00084
00085
00086 typedef std::pair< AcsBulkdata::RecvData , AcsBulkdata::BulkDataSender<TSenderCallback> *> Sender_Map_Pair;
00087
00088 typedef ACE_Hash_Map_Manager <ACE_CString, Sender_Map_Pair, ACE_Null_Mutex> Sender_Map;
00089 typedef ACE_Hash_Map_Entry <ACE_CString, Sender_Map_Pair > Sender_Map_Entry;
00090 typedef ACE_Hash_Map_Iterator <ACE_CString, Sender_Map_Pair ,ACE_Null_Mutex> Sender_Map_Iterator;
00091
00092 public:
00093
00099 BulkDataDistributerImpl(const ACE_CString& name,maci::ContainerServices* containerServices);
00100
00104 virtual ~BulkDataDistributerImpl();
00105
00106
00107
00108
00109 virtual void initialize();
00110
00111 virtual void cleanUp();
00112
00113
00114
00115
00125 virtual void connect(bulkdata::BulkDataReceiver_ptr receiverObj_p);
00126
00127
00137 virtual void multiConnect(bulkdata::BulkDataReceiver_ptr receiverObj_p);
00138
00148 virtual void connectByName(const char *receiverName_p);
00149
00150
00151
00152
00153 virtual void disconnect();
00154
00155
00156
00157
00158 virtual void multiDisconnect(bulkdata::BulkDataReceiver_ptr receiverObj_p);
00159
00160
00161
00162
00163 virtual void disconnectByName(const char *receiverName_p);
00164
00165
00174 virtual void startSend();
00175
00186 virtual void paceData();
00187
00196 virtual void stopSend();
00197
00198
00199
00211 virtual void openReceiver();
00212
00213 void openReceiverStream(const char * stream_name)
00214 {
00215 ACS_SHORT_LOG((LM_ERROR,"BulkDataDistributerImpl::openReceiverStream NOT implemented. The method is implemented just in bulkDataNT!"));
00216 }
00217
00218 void openReceiverStreamCfg (const char * stream_name, const char * stream_cfg)
00219 {
00220 ACS_SHORT_LOG((LM_ERROR,"BulkDataDistributerImpl::openReceiverStreamCfg NOT implemented. The method is implemented just in bulkDataNT!"));
00221 }
00222
00223 void openReceiverFlow (const char * stream_name, const char * flow_name)
00224 {
00225 ACS_SHORT_LOG((LM_ERROR,"BulkDataDistributerImpl::openReceiverFlow NOT implemented. The method is implemented just in bulkDataNT!"));
00226 }
00227
00228 void openReceiverFlowCfg (const char * stream_name, const char * flow_name, const char * flow_cfg)
00229 {
00230 ACS_SHORT_LOG((LM_ERROR,"BulkDataDistributerImpl::openReceiverFlowCfg NOT implemented. The method is implemented just in bulkDataNT!"));
00231 }
00232
00233
00234
00235
00236 bulkdata::BulkDataReceiverConfig * getReceiverConfig();
00237
00238
00239
00240
00241 virtual void closeReceiver();
00242
00243
00244 void closeReceiverStream(const char * stream_name)
00245 {
00246 ACS_SHORT_LOG((LM_ERROR,"BulkDataDistributerImpl::closeReceiverStream NOT implemented"));
00247 }
00248
00249
00250
00251
00252 virtual void setReceiver(const bulkdata::BulkDataReceiverConfig &receiverConfig);
00253
00254
00255
00256 virtual AcsBulkdata::BulkDataDistributer<TReceiverCallback, TSenderCallback> *getDistributer()
00257 {
00258 return &distributer;
00259 }
00260
00261
00262
00263
00264
00265 virtual ACSErr::Completion *getCbStatus(CORBA::ULong flowNumber);
00266
00267 virtual ACSErr::Completion *getReceiverCbStatus(const char *recvName, CORBA::ULong flowNumber);
00268
00269
00270
00271
00272 virtual void setTimeout(CORBA::ULong flowNumber, CORBA::ULong timeout)
00273 {
00274
00275 }
00276
00277
00278
00279
00280 virtual void setRecvName(const char *recvName)
00281 {
00282
00283 }
00284
00285
00286
00287
00288 virtual void subscribeNotification(ACS::CBvoid_ptr notifCb);
00289
00295 void fwdData2UserCB(CORBA::Boolean enable)
00296 {
00297 ACS_SHORT_LOG((LM_WARNING,"BulkDataDistributerImpl<>::fwdData2UserCB not implemnted!"));
00298 }
00299
00300 private:
00301
00302 maci::ContainerServices *containerServices_p;
00303 CDB::DAL_ptr dal_p;
00304
00305 AcsBulkdata::BulkDataDistributer<TReceiverCallback, TSenderCallback> distributer;
00306
00307 void rmEntryFromSenderMap(bulkdata::BulkDataReceiver_ptr receiverObj_p);
00308 void rmEntryFromSenderMap(const char *receiverName_p);
00309 };
00310
00311
00312
00313 #include "bulkDataDistributerImpl.i"
00314
00315 #endif