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 //to be defined by the user 00077 } 00078 00079 ACE_HANDLE getHandle(); 00080 00081 CORBA::Boolean isFepAlive() 00082 { 00083 return isFepAlive_m; 00084 } 00085 00086 virtual void setCbTimeout(ACE_Time_Value cbTimeout) 00087 { 00088 // empty 00089 } 00090 00091 /********************* methods to be implemented by the user *****************/ 00092 00093 virtual int cbStart(ACE_Message_Block * userParam_p = 0) = 0; 00094 00095 virtual int cbReceive(ACE_Message_Block * frame_p) = 0; 00096 00097 virtual int cbStop() = 0; 00098 00099 protected: 00100 00101 ACE_CString flowname_m; 00102 00103 CORBA::ULong flowNumber_m; 00104 00105 ACE_CString recvName_m; 00106 00107 private: 00108 00109 void cleanRecvBuffer(); 00110 00111 void checkFlowTimeout(); 00112 00113 ACE_Time_Value waitPeriod_m; 00114 00115 CORBA::ULong loop_m; 00116 00117 Cb_State state_m; 00118 Cb_SubState substate_m; 00119 00120 CORBA::Long dim_m; 00121 00122 CORBA::Long count_m; 00123 00124 CORBA::Long frameCount_m; 00125 00126 ACE_Message_Block *bufParam_p; 00127 00128 CORBA::Boolean timeout_m; 00129 CORBA::Boolean working_m; 00130 CORBA::Boolean error_m; 00131 00132 ACSBulkDataStatus::AVCbErrorCompletion *errComp_p; 00133 00134 CORBA::ULong flowTimeout_m; 00135 00136 ACE_Time_Value startTime_m; 00137 00138 CORBA::Boolean isFepAlive_m; 00139 }; 00140 00141 00142 #endif