ps_usp_rspfile.cpp

来自「这个程序可以将给定的文件块写到Berkeley DB中去」· C++ 代码 · 共 109 行

CPP
109
字号
// PS_usp_rspfile.cpp: implementation of the PS_usp_rspfile class.
//
//////////////////////////////////////////////////////////////////////

#include "PS_usp_rspfile.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
int keycount;

void initfun()
{
	keycount = 0;
}
CUspRspfile::CUspRspfile()
{

}
CUspRspfile::CUspRspfile(CUspLog *log)
{
	this->log = *log;
	initfun();
}

CUspRspfile::~CUspRspfile()
{
	initfun();	
}


void CUspRspfile::addBlockData(BlockData * blockdata)
{
	//log.writeLog("addHashKey = ",hashString);
	m_blockdatalist.push_back(blockdata);
	keycount++;
}

void CUspRspfile::setFileData(FileData * filedata)
{
	this->filedata = filedata;
}

const int HEAD_STR_LEN = 41;//头<?xml version=\"1.0\" encoding=\"UTF-8\"?>
const int BLOCK_STR_LEN = 170;//<SLICE>....
const int FILE_STR_LEN = 100;//<FILE>...

void CUspRspfile::genrateRspFile()
{
	//char hashString[HASH_LEN];
	//memset(hashString,0,HASH_LEN);
	
	log.writeLog("keycount = ",keycount);
	//分配XML的空间大小
	int len = HEAD_STR_LEN+FILE_STR_LEN+BLOCK_STR_LEN*keycount;	
	char *rspString = (char*)malloc( len );
	memset( rspString , 0x0 , len);
	log.writeLog("len = ",len);	
	log.debugLog("=========================fileElement_start.start=======================\r\n");
	strcpy(rspString ,"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n");
	char fileElement_start[FILE_STR_LEN]= {0};
	memset( fileElement_start , 0x0 , FILE_STR_LEN);
	sprintf(fileElement_start,"<FILE block=\"%d\" name=\"%s\" sfid=\"%s\" size=\"%d\">\r\n"
			,filedata->block,filedata->name,filedata->sfid,filedata->size);
	
	//int fileElement_startlen = strlen(fileElement_start);
	//log.writeLog("fileElement_startlen len = ",fileElement_startlen);
	
	//追加字串
	strcat(rspString,fileElement_start);
	log.debugLog("=========================blockstr.start=======================\r\n");
	PBlockDataList iList = NULL;
	for(iList=m_blockdatalist.begin();iList!=m_blockdatalist.end();iList++)
	{
		//log.writeLog("in seed hashkey = ",*iList);
		BlockData * blockdata= *iList;
		
		char blockstr[BLOCK_STR_LEN]= {0};
		memset( blockstr , 0x0 , BLOCK_STR_LEN);
		sprintf(blockstr,
			"\t<SLICE area=\"%d\" id=\"%d\" size=\"%d\">\r\n\t\t<SHA>%s</SHA>\r\n\t\t<PEER>%s</PEER>\r\n\t\t<STAT>%d</STAT>\r\n\t</SLICE>\r\n"
			,blockdata->area,blockdata->id,blockdata->size,blockdata->sha,blockdata->peer,blockdata->stat);
		
		//int loglen = strlen(blockstr);
		//log.writeLog("blockstr len = ",loglen);
		
		//追加字串
		strcat(rspString,blockstr);
		
		//一定要注意清理blockdata
		delete []blockdata->sha;
		delete []blockdata->peer;
		delete blockdata;
	}
	//追加字串
	strcat(rspString,"</FILE>\r\n");
	log.writeLog(rspString);
	int rspstringlen = strlen(rspString);
	log.writeLog("rspString len 222= ",rspstringlen);
	log.writeLog("");
	log.debugLog("=========================free block.start=======================\r\n");
	//释放资源
	free(rspString);
	delete [](filedata->name);
	delete [](filedata->sfid);
	delete filedata;
	
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?