void StatusType::serialize( std::vector<std::string>& saStatus , size_t& nCount , SocketPackage& cPackage , bool bWriteToStorage ) { size_t n; if ( bWriteToStorage ) { cPackage.add( int(nCount) ); for ( n=0; n<nCount; n++ ) cPackage.add( saStatus[n] ); } else { nCount = cPackage.getInt(); saStatus.resize( std::max<size_t>(INI_SIZE,nCount) ); for ( n=0; n<nCount; n++ ) { cPackage.getString( saStatus[n] ); } } }
bool ReadData::preprocess( SocketPackage& cPackageIn ) { cPackageIn.done(); return true; }
void TFSBasis::serialize( std::vector<Class*>& paArray , size_t& nSize , SocketPackage& cPackage , bool bWriteToStorage ) { size_t n; TFSBasis *pAction; if ( bWriteToStorage ) { cPackage.add( int(nSize) ); for ( n=0; n<nSize; n++ ) { pAction = paArray[n]; if ( !getStorage().isPresent(pAction) ) pAction = NULL; serialize( pAction, cPackage, true ); } } else { nSize = cPackage.getInt(); paArray.resize( std::max<size_t>(INI_SIZE,nSize) ); for ( n=0; n<nSize; n++ ) { serialize( pAction, cPackage, false ); if ( pAction == NULL ) paArray[n] = NULL; else paArray[n] = dynamic_cast<Class*>( pAction ); } } }
void ReadData::readEveryObject( SocketPackage& cPackage ) { ItemStorageWithKey<Class,std::string>& cStorage = Class::getStorage(); int n, max; std::string sID = Class::ClassID(); TFSBasis* pObject; max = cPackage.getInt(); for ( n=0; n<max; n++ ) TFSBasis::serialize( pObject, cPackage, false ); }
bool ReadData::postprocess( SocketPackage& cPackageOut ) { TFSBasis *pObject = NULL; cPackageOut.resetCounter(); readEveryObject<StatusType>( cPackageOut ); readEveryObject<User> ( cPackageOut ); TFSBasis::serialize( pObject, cPackageOut, false ); return true; }
bool ReadData::process( SocketPackage& cPackageIn , SocketPackage& cPackageOut ) { std::string sBuffer, sFilename; bool bCanRead = false; std::ifstream cFile; cPackageIn.resetCounter(); cPackageIn.getString( sBuffer ); // action name createFilename( cPackageIn, sFilename, false ); // read two strings cFile.open( sFilename.c_str(), std::ios::in|std::ios::binary ); bCanRead = cFile.is_open(); if ( bCanRead ) { struct _stat nStatus; int nSize; std::vector<char> caBuffer; ::_stat( sFilename.c_str(), &nStatus ); nSize = nStatus.st_size; caBuffer.resize( nSize ); cFile.read( &caBuffer[0], nSize ); cFile.close(); cPackageOut.resetCounter(); cPackageOut.add( &caBuffer[0], nSize ); cPackageOut.done(); } else cPackageOut.resetCounter(); return bCanRead; }