#include <DimRpcWriter.h>
Public Types | |
typedef const std::string | WriterArgType |
Public Member Functions | |
DimRpcWriter (WriterArgType &name) | |
virtual | ~DimRpcWriter () |
int | writeEvent (void *pevt, int size) |
int | close () |
int | stat () |
Private Member Functions | |
DimRpcWriter () | |
Private Attributes | |
int | m_inCode |
DimRpcInfo * | m_rpc |
Static Private Attributes | |
static pthread_mutex_t | m_rpcLock = PTHREAD_MUTEX_INITIALIZER |
Definition at line 10 of file DimRpcWriter.h.
typedef const std::string DimRpcWriter::WriterArgType |
Definition at line 14 of file DimRpcWriter.h.
DimRpcWriter::DimRpcWriter | ( | WriterArgType & | name | ) |
Definition at line 10 of file DimRpcWriter.cxx.
References m_rpc, ClientErrHandler::registerInstance(), and DistBossCode::ServerTimeout.
00011 : m_inCode(0) 00012 { 00013 if ( name.empty() ) { 00014 throw RawExMessage("[NetDataWriter] The name of DistBoss Server was not set!"); 00015 } 00016 00017 ClientErrHandler::registerInstance(); 00018 00019 m_rpc = new DimRpcInfo(name.c_str(), 5, DistBossCode::ServerTimeout); 00020 }
DimRpcWriter::~DimRpcWriter | ( | ) | [virtual] |
Definition at line 22 of file DimRpcWriter.cxx.
References m_rpc.
00023 { 00024 delete m_rpc; 00025 }
DimRpcWriter::DimRpcWriter | ( | ) | [private] |
int DimRpcWriter::close | ( | ) |
int DimRpcWriter::stat | ( | ) |
Definition at line 80 of file DimRpcWriter.cxx.
References m_inCode.
00081 { 00082 return m_inCode; 00083 }
int DimRpcWriter::writeEvent | ( | void * | pevt, | |
int | size | |||
) |
Definition at line 27 of file DimRpcWriter.cxx.
References genRecEmupikp::i, m_inCode, m_rpc, m_rpcLock, DistBossCode::ServerError, DistBossCode::ServerTimeout, DistBossCode::StatusFinalize, and DistBossCode::StatusSuccess.
00028 { 00029 static int nn = 0; 00030 ++nn; 00031 00032 for ( int i = 1; i < 7; ++i ) { 00033 pthread_mutex_lock( &m_rpcLock ); 00034 00035 m_rpc->setData(pevt, size); 00036 int inCode = m_rpc->getInt(); 00037 00038 pthread_mutex_unlock( &m_rpcLock ); 00039 00040 00041 if ( inCode != DistBossCode::StatusSuccess) { 00042 if ( inCode == DistBossCode::ServerTimeout) { 00043 if ( i < 6 ) { 00044 int sec = i; 00045 std::cout << "[NetDataWriter] Event " << nn << " timeout. Sleep " << sec << "s before retry." << std::endl; 00046 sleep(sec); 00047 std::cout << "[NetDataWriter] Event " << nn << " now retry time " << i << " ..." << std::endl; 00048 continue; 00049 } 00050 else { 00051 m_inCode = inCode; 00052 throw RawExMessage("[NetDataWriter] Failed to retry server. Stop this client!"); 00053 } 00054 } 00055 else if ( inCode == DistBossCode::ServerError) { 00056 m_inCode = inCode; 00057 throw RawExMessage("[NetDataWriter] Received server ERROR code!"); 00058 } 00059 else { 00060 m_inCode = inCode; 00061 throw RawExMessage("[NetDataWriter] Unknown server code!"); 00062 } 00063 } 00064 00065 if ( size == 4 && *((int*)pevt) == DistBossCode::StatusFinalize) { 00066 throw ReachEndOfFileList(); 00067 } 00068 00069 break; 00070 } 00071 00072 return 0; 00073 }
int DimRpcWriter::m_inCode [private] |
DimRpcInfo* DimRpcWriter::m_rpc [private] |
Definition at line 33 of file DimRpcWriter.h.
Referenced by DimRpcWriter(), writeEvent(), and ~DimRpcWriter().
pthread_mutex_t DimRpcWriter::m_rpcLock = PTHREAD_MUTEX_INITIALIZER [static, private] |