📄 xmlparse0.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 + -