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 typedef ACE_Pair< bulkdata::BulkDataReceiver_ptr, AcsBulkdata::BulkDataSender<TSenderCallback> *>
Sender_Map_Pair;
00085
00086 typedef ACE_Hash_Map_Manager <ACE_CString, Sender_Map_Pair, ACE_Null_Mutex>
Sender_Map;
00087 typedef ACE_Hash_Map_Entry <ACE_CString, Sender_Map_Pair >
Sender_Map_Entry;
00088 typedef ACE_Hash_Map_Iterator <ACE_CString, Sender_Map_Pair ,ACE_Null_Mutex>
Sender_Map_Iterator;
00089
00090
public:
00091
00097
BulkDataDistributerImpl(
const ACE_CString& name,
maci::ContainerServices* containerServices);
00098
00102
virtual ~BulkDataDistributerImpl();
00103
00104
00105
00106
00107
virtual void initialize();
00108
00109
virtual void cleanUp();
00110
00111
00112
00113
00123
virtual void connect(bulkdata::BulkDataReceiver_ptr receiverObj_p);
00124
00125
00135
virtual void multiConnect(bulkdata::BulkDataReceiver_ptr receiverObj_p);
00136
00146
virtual void connectByName(
const char *receiverName_p);
00147
00148
00149
00150
00151
virtual void disconnect();
00152
00153
00154
00155
00156
virtual void multiDisconnect(bulkdata::BulkDataReceiver_ptr receiverObj_p);
00157
00158
00159
00160
00161
virtual void disconnectByName(
const char *receiverName_p);
00162
00163
00172
virtual void startSend();
00173
00184
virtual void paceData();
00185
00194
virtual void stopSend();
00195
00196
00197
00209
virtual void openReceiver();
00210
00211
00212
00213
00214 bulkdata::BulkDataReceiverConfig *
getReceiverConfig();
00215
00216
00217
00218
00219
virtual void closeReceiver();
00220
00221
00222
00223
00224
virtual void setReceiver(
const bulkdata::BulkDataReceiverConfig &receiverConfig);
00225
00226
00227
00228 virtual AcsBulkdata::BulkDataDistributer<TReceiverCallback, TSenderCallback> *
getDistributer()
00229 {
00230
return &distributer;
00231 }
00232
00233
00234
00235
00236
00237
virtual ACSErr::Completion *
getCbStatus(CORBA::ULong flowNumber);
00238
00239
virtual ACSErr::Completion *
getReceiverCbStatus(
const char *recvName, CORBA::ULong flowNumber);
00240
00241
00242
00243
00244 virtual void setTimeout(CORBA::ULong flowNumber, CORBA::ULong timeout)
00245 {
00246
00247 }
00248
00249
00250
00251
00252 virtual void setRecvName(
const char *recvName)
00253 {
00254
00255 }
00256
00257
00258
00259
00260
virtual void subscribeNotification(ACS::CBvoid_ptr notifCb);
00261
00262
00263
private:
00264
00265 maci::ContainerServices *containerServices_p;
00266 CDB::DAL_ptr dal_p;
00267
00268 AcsBulkdata::BulkDataDistributer<TReceiverCallback, TSenderCallback> distributer;
00269
00270
void rmEntryFromSenderMap(bulkdata::BulkDataReceiver_ptr receiverObj_p);
00271
void rmEntryFromSenderMap(
const char *receiverName_p);
00272 };
00273
00274
00275
00276
#include "bulkDataDistributerImpl.i"
00277
00278
#endif