00001 #ifndef _BULKDATA_CALLBACK_H 00002 #define _BULKDATA_CALLBACK_H 00003 00004 #ifndef __cplusplus 00005 #error This is a C++ include file and cannot be used from plain C 00006 #endif 00007 00008 #include "orbsvcs/AV/AVStreams_i.h" 00009 #include "orbsvcs/AV/Endpoint_Strategy.h" 00010 #include "orbsvcs/AV/Protocol_Factory.h" 00011 #include "orbsvcs/AV/Flows_T.h" 00012 #include "orbsvcs/AV/Transport.h" 00013 #include "orbsvcs/AV/Policy.h" 00014 00015 #include <baci.h> 00016 00017 #include "ACSBulkDataError.h" 00018 #include "ACSBulkDataStatus.h" 00019 00020 #include "bulkDataReceiver.h" 00021 00022 #include <iostream> 00023 00024 class BulkDataCallback : public TAO_AV_Callback 00025 { 00026 00027 public: 00028 00029 enum Cb_State 00030 { 00031 CB_UNS, 00032 CB_SEND_PARAM, 00033 CB_SEND_DATA 00034 }; 00035 00036 enum Cb_SubState 00037 { 00038 CB_SUB_UNS, 00039 CB_SUB_INIT 00040 }; 00041 00042 00043 BulkDataCallback(); 00044 00045 virtual ~BulkDataCallback(); 00046 00047 virtual int handle_start(void); 00048 00049 virtual int handle_stop (void); 00050 00051 virtual int handle_destroy (void); 00052 00053 virtual int receive_frame (ACE_Message_Block *frame, TAO_AV_frame_info *frame_info, const ACE_Addr &); 00054 00055 virtual void setFlowname (const char*); 00056 00057 virtual void setReceiverName(ACE_CString recvName); 00058 00059 virtual void setSleepTime(ACE_Time_Value locWaitPeriod); 00060 00061 virtual void setSafeTimeout(CORBA::ULong locLoop); 00062 00063 virtual CORBA::Boolean isTimeout(); 00064 virtual CORBA::Boolean isWorking(); 00065 virtual CORBA::Boolean isError(); 00066 00067 virtual CompletionImpl *getErrorCompletion(); 00068 00069 virtual void setFlowTimeout(CORBA::ULong timeout); 00070 00071 virtual void closePeer(); 00072 00073 template<class TCallback> 00074 void setReceiver(AcsBulkdata::BulkDataReceiver<TCallback> *recv) 00075 { 00076 ACE_UNUSED_ARG(recv); 00077 //to be defined by the user 00078 } 00079 00080 ACE_HANDLE getHandle(); 00081 00082 CORBA::Boolean isFepAlive() 00083 { 00084 return isFepAlive_m; 00085 } 00086 00087 virtual void setCbTimeout(ACE_Time_Value cbTimeout) 00088 { 00089 // empty 00090 } 00091 00092 void fwdData2UserCB(CORBA::Boolean enable); 00093 00094 /********************* methods to be implemented by the user *****************/ 00095 00096 virtual int cbStart(ACE_Message_Block * userParam_p = 0) = 0; 00097 00098 virtual int cbReceive(ACE_Message_Block * frame_p) = 0; 00099 00100 virtual int cbStop() = 0; 00101 00102 protected: 00103 00104 ACE_CString flowname_m; 00105 00106 CORBA::ULong flowNumber_m; 00107 00108 ACE_CString recvName_m; 00109 00110 bool fwdData2UserCB_m; 00111 00112 private: 00113 00114 void cleanRecvBuffer(); 00115 00116 void checkFlowTimeout(); 00117 00118 ACE_Time_Value waitPeriod_m; 00119 00120 CORBA::ULong loop_m; 00121 00122 Cb_State state_m; 00123 Cb_SubState substate_m; 00124 00125 CORBA::Long dim_m; 00126 00127 CORBA::Long count_m; 00128 00129 CORBA::Long frameCount_m; 00130 00131 ACE_Message_Block *bufParam_p; 00132 00133 CORBA::Boolean timeout_m; 00134 CORBA::Boolean working_m; 00135 CORBA::Boolean error_m; 00136 00137 ACSBulkDataStatus::AVCbErrorCompletion *errComp_p; 00138 00139 CORBA::ULong flowTimeout_m; 00140 00141 ACE_Time_Value startTime_m; 00142 00143 CORBA::Boolean isFepAlive_m; 00144 }; 00145 00146 00147 #endif