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 <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 ACE_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"));
00216 }
00217
00218
00219
00220
00221 bulkdata::BulkDataReceiverConfig * getReceiverConfig();
00222
00223
00224
00225
00226 virtual void closeReceiver();
00227
00228
00229 void closeReceiverStream(const char * stream_name)
00230 {
00231 ACS_SHORT_LOG((LM_ERROR,"BulkDataDistributerImpl::closeReceiverStream NOT implemented"));
00232 }
00233
00234
00235
00236
00237 virtual void setReceiver(const bulkdata::BulkDataReceiverConfig &receiverConfig);
00238
00239
00240
00241 virtual AcsBulkdata::BulkDataDistributer<TReceiverCallback, TSenderCallback> *getDistributer()
00242 {
00243 return &distributer;
00244 }
00245
00246
00247
00248
00249
00250 virtual ACSErr::Completion *getCbStatus(CORBA::ULong flowNumber);
00251
00252 virtual ACSErr::Completion *getReceiverCbStatus(const char *recvName, CORBA::ULong flowNumber);
00253
00254
00255
00256
00257 virtual void setTimeout(CORBA::ULong flowNumber, CORBA::ULong timeout)
00258 {
00259
00260 }
00261
00262
00263
00264
00265 virtual void setRecvName(const char *recvName)
00266 {
00267
00268 }
00269
00270
00271
00272
00273 virtual void subscribeNotification(ACS::CBvoid_ptr notifCb);
00274
00280 void fwdData2UserCB(CORBA::Boolean enable)
00281 {
00282 ACS_SHORT_LOG((LM_WARNING,"BulkDataDistributerImpl<>::fwdData2UserCB not implemnted!"));
00283 }
00284
00285 private:
00286
00287 maci::ContainerServices *containerServices_p;
00288 CDB::DAL_ptr dal_p;
00289
00290 AcsBulkdata::BulkDataDistributer<TReceiverCallback, TSenderCallback> distributer;
00291
00292 void rmEntryFromSenderMap(bulkdata::BulkDataReceiver_ptr receiverObj_p);
00293 void rmEntryFromSenderMap(const char *receiverName_p);
00294 };
00295
00296
00297
00298 #include "bulkDataDistributerImpl.i"
00299
00300 #endif