⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xmlparse0.cpp

📁 symbian系统上的记事本程序
💻 CPP
字号:
#include "XMLparse.h"
#include "LIT.h"
#include <aknnotewrappers.h> 

CXMLparse* CXMLparse::NewL()
{
	CXMLparse* self = NewLC();
    CleanupStack::Pop(self);
    return self;
}

CXMLparse* CXMLparse::NewLC()
{
	CXMLparse* self = new (ELeave) CXMLparse();
	CleanupStack::PushL(self);
    self->ConstructL();
    return self;
}

CXMLparse::CXMLparse()
{
	//iResult = -1;
	ResetResult();
	ResetServerState();
}

CXMLparse::~CXMLparse()
{
	MEM_FREE(iEngine);
	MEM_FREE(iBody);
	MEM_FREE(iCard);
	MEM_FREE(iCardArray);
}

void CXMLparse::ConstructL()
{
	iEngine = CHTTPExampleEngine::NewL(*this);
}

void CXMLparse::Reg(const TDesC& aPhoneNum, const TDesC& aPassWord)
{
	// 生成URL
	CreateURL(0, aPhoneNum, aPassWord);
	// 发送GET请求
	iEngine->GetRequestL(URLBasic);
	// 测试URL
	//TestFun();
}

void CXMLparse::Login(const TDesC& aPhoneNum, const TDesC& aPassWord)
{
	// 生成URL
	CreateURL(1, aPhoneNum, aPassWord);
	// 发送GET请求
	iEngine->GetRequestL(URLBasic);
	// 测试URL
	//TestFun();
}

void CXMLparse::UpLoad(const TDesC& aPhoneNum, CArrayPtrSeg<CBookInfo>* aCardArray)
{
	if(aCardArray==NULL)
	{
		return;
	}
	// 生成Body
	CreateBody(aPhoneNum, aCardArray);
	// POST
	iEngine->PostRequestL(iBody->Des());
	// 测试
	//TestFun();
}

void CXMLparse::DownLoad(const TDesC& aPhoneNum, const TDesC& aPassWord)
{
	// 生成URL
	CreateURL(2, aPhoneNum, aPassWord);
	// 发送GET请求
	iEngine->GetRequestL(URLBasic);
	// 测试
	//TestFun();
}

void CXMLparse::Cancal()
{
	iEngine->Cancel();
	iServerState = -1;
	iResult = -1;
}

void CXMLparse::CreateURL(TInt aState, const TDesC& aPhoneNum, const TDesC& aPassWord)
{
	URLBasic.Copy(REGORLOGBASICURL);
	
	iPhoneNumPos = URLBasic.Find(PHONESIGN);
	iPhoneNumLength = PHONESIGN.iTypeLength;
	URLBasic.Replace(iPhoneNumPos, iPhoneNumLength, aPhoneNum);
	
	iPassWDPos = URLBasic.Find(PASSWDSIGN);
	iPassWDLength = PASSWDSIGN.iTypeLength;
	URLBasic.Replace(iPassWDPos, iPassWDLength, aPassWord);

	if(aState==0)
	{
		iStactPos = URLBasic.Find(STATESIGN);
		iStactLength = STATESIGN.iTypeLength;
		URLBasic.Replace(iStactPos, iStactLength, REGSTATE);
	}
	else if(aState==1)
	{
		iStactPos = URLBasic.Find(STATESIGN);
		iStactLength = STATESIGN.iTypeLength;
		URLBasic.Replace(iStactPos, iStactLength, LOGSTATE);
	}
	else if(aState==2)
	{
		iStactPos = URLBasic.Find(STATESIGN);
		iStactLength = STATESIGN.iTypeLength;
		URLBasic.Replace(iStactPos, iStactLength, DOWNLOADSTATE);
	}
}

void CXMLparse::TestFun()
{
	CAknInformationNote* informationNote = new (ELeave) CAknInformationNote;
	TBuf<4> temp;
	temp.AppendNum(iResult);
	informationNote->ExecuteLD(temp);
	//informationNote->ExecuteLD(URLBasic);
}

void CXMLparse::ResponseStatusL(TInt aStatusCode, const TDesC& aStatusText)
{

}

void CXMLparse::ResponseReceivedL(const TDesC& aResponse)	
{
	TInt aStartPosTmp;
	TInt aEndPosTmp;
	TBuf<16> aStateTmp;
	TBuf<16> aTmp;
	iResult = -1;

	aStartPosTmp = aResponse.Find(TYPESTART) + TYPESTART.iTypeLength;
	aEndPosTmp = aResponse.Find(TYPEEND);
	aStateTmp.Copy(aResponse.Mid(aStartPosTmp, aEndPosTmp-aStartPosTmp));	// 获得返回操作状态
	
	if((aStateTmp.Compare(_L("regi"))==0)||(aStateTmp.Compare(_L("login"))==0))	// 如果返回是注册或者登录的响应
	{
		aStartPosTmp = aResponse.Find(RESSTART) + RESSTART.iTypeLength;
		aEndPosTmp = aResponse.Find(RESEND);
		aTmp.Copy(aResponse.Mid(aStartPosTmp, aEndPosTmp-aStartPosTmp));

		TLex iLex(aTmp);
		iLex.Val(iResult);	// 获得状态值
	}
	else if(aStateTmp.Compare(_L("update"))==0)
	{
		aStartPosTmp = aResponse.Find(RESSTART) + RESSTART.iTypeLength;
		aEndPosTmp = aResponse.Find(RESEND);
		aTmp.Copy(aResponse.Mid(aStartPosTmp, aEndPosTmp-aStartPosTmp));
		
		TLex iLex(aTmp);
		iLex.Val(iResult);	// 获得状态值
	}
	else if(aStateTmp.Compare(_L("down"))==0)
	{
		// 解析函数
		XML(aResponse);
		iResult = 0;
	}
}

void CXMLparse::AddaCard(CBookInfo* aCard)
{
	if(aCard==NULL)
	{
		return;
	}

	TBuf<256> aCardTmp;
	aCardTmp.Append(RECORDSTART);
	
	aCardTmp.Append(LNAMESTART);
	aCardTmp.Append(aCard->GetLastName()->Des());
	aCardTmp.Append(LNAMEEND);
	
	aCardTmp.Append(FNAMESTART);
	aCardTmp.Append(aCard->GetFirstName()->Des());
	aCardTmp.Append(FNAMEEND);

	aCardTmp.Append(MOBSTART);
	aCardTmp.Append(aCard->GetTelephone()->Des());
	aCardTmp.Append(MOBEND);

	aCardTmp.Append(MAILSTART);
	aCardTmp.Append(MAILEND);

	aCardTmp.Append(ADDRSTART);
	aCardTmp.Append(ADDREND);

	aCardTmp.Append(COMPANYSTART);
	aCardTmp.Append(COMPANYEND);

	aCardTmp.Append(RECORDEND);

	MEM_FREE(iCard);

	iCard = HBufC::NewL(aCardTmp.Length());
	iCard->Des().Copy(aCardTmp);
}


void CXMLparse::CreateBody(const TDesC& aPhoneNum, CArrayPtrSeg<CBookInfo>* aCardArray)
{
	if(NULL!=iBody)
	{
		delete iBody;
		iBody = NULL;
	}

	if(aCardArray==NULL)
	{
		return;
	}

	iBody = HBufC::NewL(aCardArray->Count()*256);

	iBody->Des().Append(RSSSTART);
	iBody->Des().Append(TYPESTART);
	iBody->Des().Append(UPDATESTATE);
	iBody->Des().Append(TYPEEND);

	iBody->Des().Append(MOBILESTART);
	iBody->Des().Append(aPhoneNum);
	iBody->Des().Append(MOBILEEND);


	for(TInt i=0; i<aCardArray->Count(); i++)
	{
		AddaCard(aCardArray->At(i));
		iBody->Des().Append(iCard->Des());	
	}

	iBody->Des().Append(RSSEND);
}



void CXMLparse::XML(const TDesC& aResponse)
{
	iCardArray = NULL;

	HBufC* aRes;
	aRes = HBufC::NewL(aResponse.Length());
	aRes->Des().Copy(aResponse);

	if(aRes->Find(RECORDSTART)==KErrNotFound)
	{
		return;
	}
	
	iCardArray = new(ELeave) CArrayPtrSeg<CBookInfo>(1);
	TInt aStartPosTemp;
	TInt aEndPosTemp;
	CBookInfo* aCardTemp;
	
	//循环
	while(aRes->Find(RECORDSTART)!=KErrNotFound)	// 如果能找到RECORD
	{
		aCardTemp = CBookInfo::NewL();

		aStartPosTemp = aRes->Find(LNAMESTART)+LNAMESTART.iTypeLength;
		aEndPosTemp = aRes->Find(LNAMEEND);
		aCardTemp->SetLastName(aRes->Mid(aStartPosTemp, aEndPosTemp-aStartPosTemp));

		aStartPosTemp = aRes->Find(FNAMESTART)+FNAMESTART.iTypeLength;
		aEndPosTemp = aRes->Find(FNAMEEND);
		aCardTemp->SetFirstName(aRes->Mid(aStartPosTemp, aEndPosTemp-aStartPosTemp));

		aStartPosTemp = aRes->Find(MOBSTART)+MOBSTART.iTypeLength;
		aEndPosTemp = aRes->Find(MOBEND);
		aCardTemp->SetTelephone(aRes->Mid(aStartPosTemp, aEndPosTemp-aStartPosTemp));
		
		iCardArray->AppendL(aCardTemp);
		
		aStartPosTemp = aRes->Find(RECORDSTART);
		aEndPosTemp = aRes->Find(RECORDEND)+RECORDEND.iTypeLength;
		aRes->Des().Delete(aStartPosTemp, aEndPosTemp);
	}

	MEM_FREE(aRes);
}

const CArrayPtrSeg<CBookInfo>* CXMLparse::GetArray()
{
	return iCardArray;
}

const TInt CXMLparse::GetResult()
{
	return iResult;
}

const TInt CXMLparse::GetServerState()
{
	return iServerState;
}

void CXMLparse::ResetResult()
{
	iResult = -1;
}

void CXMLparse::ResetServerState()
{
	iServerState = -1;
}


//////////////////////////////////////////////////////////////////////////
//名片夹信息类
/***************************************************************************
*** CBookInfo Startup
***************************************************************************/
CBookInfo* CBookInfo::NewL()
{
	CBookInfo* self = CBookInfo::NewLC();
	CleanupStack::Pop();
	return self;
}

CBookInfo* CBookInfo::NewLC()
{
	CBookInfo* self = new(ELeave) CBookInfo;
	CleanupStack::PushL(self);
	return self;
}

CBookInfo::CBookInfo()
{
	m_nItem_ID			= 0;
	m_sLastName			= NULL;
	m_sFirstName		= NULL;
	m_sTelephone		= NULL;
	m_sHomeTelephone	= NULL;
	m_sBusinessTelephone= NULL;
	m_sHomeMobile		= NULL;
}

CBookInfo::~CBookInfo()
{
	MEM_FREE(m_sLastName);
	MEM_FREE(m_sFirstName);
	MEM_FREE(m_sTelephone);
	MEM_FREE(m_sHomeTelephone);
	MEM_FREE(m_sBusinessTelephone);
	MEM_FREE(m_sHomeMobile);
}

//Last Name
void CBookInfo::SetLastName(const TDesC& aBuf)
{
	MEM_FREE(m_sLastName);
	m_sLastName = HBufC::NewL(aBuf.Length());
	m_sLastName->Des().Copy(aBuf);
}

//first name
void CBookInfo::SetFirstName(const TDesC& aBuf)
{
	MEM_FREE(m_sFirstName);
	m_sFirstName = HBufC::NewL(aBuf.Length());
	m_sFirstName->Des().Copy(aBuf);
}

//m_sTelephone
void CBookInfo::SetTelephone(const TDesC& aBuf)
{
	MEM_FREE(m_sTelephone);
	m_sTelephone = HBufC::NewL(aBuf.Length());
	m_sTelephone->Des().Copy(aBuf);
}

//m_sHomeTelephone
void CBookInfo::SetHomeTelephone(const TDesC& aBuf)
{
	MEM_FREE(m_sHomeTelephone);
	m_sHomeTelephone = HBufC::NewL(aBuf.Length());
	m_sHomeTelephone->Des().Copy(aBuf);
}

//m_sBusinessTelephone
void CBookInfo::SetBusinessTelephone(const TDesC& aBuf)
{
	MEM_FREE(m_sBusinessTelephone);
	m_sBusinessTelephone = HBufC::NewL(aBuf.Length());
	m_sBusinessTelephone->Des().Copy(aBuf);
}

//m_sHomeMobile
void CBookInfo::SetHomeMobileNumber(const TDesC& aBuf)
{
	MEM_FREE(m_sHomeMobile);
	m_sHomeMobile = HBufC::NewL(aBuf.Length());
	m_sHomeMobile->Des().Copy(aBuf);
}

⌨️ 快捷键说明

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