00001 #ifndef _BULK_DATA_NT_SENDER_STREAM_H_ 00002 #define _BULK_DATA_NT_SENDER_STREAM_H_ 00003 /******************************************************************************* 00004 * ALMA - Atacama Large Millimiter Array 00005 * (c) European Southern Observatory, 2011 00006 * 00007 * This library is free software; you can redistribute it and/or 00008 * modify it under the terms of the GNU Lesser General Public 00009 * License as published by the Free Software Foundation; either 00010 * version 2.1 of the License, or (at your option) any later version. 00011 * 00012 * This library is distributed in the hope that it will be useful, 00013 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00014 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00015 * Lesser General Public License for more details. 00016 * 00017 * You should have received a copy of the GNU Lesser General Public 00018 * License along with this library; if not, write to the Free Software 00019 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 00020 * 00021 * "@(#) $Id: bulkDataNTSenderStream.h,v 1.7 2011/11/15 16:13:47 bjeram Exp $" 00022 * 00023 * who when what 00024 * -------- -------- ---------------------------------------------- 00025 * bjeram 2011-04-19 created 00026 */ 00027 00028 /************************************************************************ 00029 * 00030 *---------------------------------------------------------------------- 00031 */ 00032 00033 #ifndef __cplusplus 00034 #error This is a C++ include file and cannot be used from plain C 00035 #endif 00036 00037 00038 #include "bulkDataNTStream.h" 00039 #include "bulkDataNTSenderFlow.h" 00040 #include "bulkDataNTSenderFlowStatusCallback.h" 00041 00042 #include <map> 00043 00044 00045 00046 namespace AcsBulkdata 00047 { 00048 00049 class BulkDataNTSenderFlow; 00050 00051 00052 // TBD: default class for TSenderCallback 00053 //template<class TSenderCallback> 00054 class BulkDataNTSenderStream : public BulkDataNTStream 00055 //, public AcsBulkdata::BulkDataNTDDSPublisher 00056 { 00057 friend class BulkDataNTSenderFlow; 00058 public: 00059 00063 //TBD should we allow to create a stream w/o configuration ? 00064 BulkDataNTSenderStream(const char* name, const SenderStreamConfiguration &cfg=SenderStreamConfiguration()); 00065 00069 virtual ~BulkDataNTSenderStream(); 00070 00071 // TBD: is this better than createSingleFlow and createMultipleFlows 00072 // do we have to provide a name or just a number, for example we need three flows 00073 // if we decide for name then we have to change send methods as well. 00074 // here we should connect to the DDS topic 00075 // TBD: here we can also send the callback? 00076 BulkDataNTSenderFlow* createFlow(const char* flowName, const SenderFlowConfiguration &cfg=SenderFlowConfiguration(), 00077 BulkDataNTSenderFlowStatusCallback *cb=0, bool releaseCB=false); 00078 00079 00080 00081 //TBD should we use this and feps if QoS XML ? 00082 // now we have it just for backward compatibility 00083 // is this method the same for Receiver and Sender ? 00084 void createMultipleFlowsFromConfig(const char *config); 00085 00086 BulkDataNTSenderFlow* getFlow(const char* flowName); 00087 00088 00089 00090 protected: 00091 virtual void removeFlowFromMap(const char* flow); 00092 00093 typedef std::map<std::string, BulkDataNTSenderFlow*> SenderFlowMap; 00094 SenderFlowMap flows_m; 00095 // we need a flag that prevents elements to be removed from map when we delete flows from dtor 00096 bool notRemoveFromMap_m; 00097 00099 BulkDataNTSenderStream(); 00101 void operator=(const BulkDataNTSenderStream&); 00103 BulkDataNTSenderStream(const BulkDataNTSenderStream&); 00104 };//class BulkDataNTSenderStream 00105 00106 }; 00107 00108 00109 #endif