📄 m3uiq2appui.cpp
字号:
if (iFolder != NULL)
{
delete iFolder;
iFolder = NULL;
}
}
// Creates a text file in the right media type directory
void CM3UIQ2AppUi::CreateTestFile()
{
iName = iCoeEnv->AllocReadResourceL(R_EXAPPSENDAS_FILE_NAME); // name of the file
_LIT(folder, "unfiled");
//iFolder = iCoeEnv->AllocReadResourceL(R_EXAPPSENDAS_DEFAULT_FOLDER); // default folder
// Specify the type of media file to create
_LIT(KMediaType, "text");
CQikMediaFile *mediaFile = CQikMediaFile::NewL(EDriveC, KMediaType, folder, *iName, NULL);
CleanupStack::PushL(mediaFile);
CQikMediaFileFolderUtils *foldersUtils = CQikMediaFileFolderUtils::NewL(*iEikonEnv);
CleanupStack::PushL(foldersUtils);
// Get the full path to the file (in the right media type directory)
TFileName path = foldersUtils->CreateFileNameL(*mediaFile);
CleanupStack::PopAndDestroy(foldersUtils);
CleanupStack::PopAndDestroy(mediaFile);
// Check if the file already exists
TUint error;
if (iEikonEnv->FsSession().Att(path, error))
{
HBufC *text = iCoeEnv->AllocReadResourceLC(R_M3UPLOAD_RECOMMAND);
CPlainText *plainText = CPlainText::NewL(); // Create plain text to be able to export proper unicode text file
CleanupStack::PushL(plainText);
plainText->InsertL(0, *text); // Insert descriptor into the plaintext object
plainText->ExportAsTextL(path, CPlainText::EOrganiseByLine, 80); // Export the plaintext as a unicode textfile
CleanupStack::PopAndDestroy(plainText);
CleanupStack::PopAndDestroy(text);
}
}
/**
* 得到消息发送核心类
**/
CMessageEngine* CM3UIQ2AppUi::MessageEngline()
{
return iMessageEngline;
}
/*
* 保存用户uid属性
*/
void CM3UIQ2AppUi::SaveUserUID(TInt aUid)
{
RFs fsSession;
User::LeaveIfError(fsSession.Connect());
CleanupClosePushL(fsSession);
RFile file;
_LIT(aFileName, "c:\\UID.txt");
TInt err = file.Replace(fsSession, aFileName, EFileWrite);
CleanupClosePushL(file);
if (err == KErrNone)
{
//写文件的流
RFileWriteStream aStream;
aStream.Attach(file, 0);
CleanupClosePushL(aStream);
HBufC8 *tempBuf = HBufC8::NewL(4);
TPtr8 ptr = tempBuf->Des();
ptr.Append((aUid >> 24) & 0x0FF);
ptr.Append((aUid >> 16) & 0x0FF);
ptr.Append((aUid >> 8) & 0x0FF);
ptr.Append(aUid & 0x0FF);
aStream.WriteL(*tempBuf);
delete tempBuf;
tempBuf = NULL;
CleanupStack::PopAndDestroy(&aStream);
}
CleanupStack::PopAndDestroy(&file);
CleanupStack::PopAndDestroy(&fsSession);
}
/*
* 读取属性信息
*/
TInt CM3UIQ2AppUi::ReadUserUID()
{
RFs fsSession;
User::LeaveIfError(fsSession.Connect());
CleanupClosePushL(fsSession);
RFile file;
_LIT(aFileName, "c:\\UID.txt");
TInt err = file.Open(fsSession, aFileName, EFileShareAny);
if (err != KErrNone)
{
CleanupStack::PopAndDestroy(&fsSession);
return 0;
}
else
{
CleanupClosePushL(file);
TInt fileSize;
file.Size(fileSize);
if (fileSize == 0 || fileSize < 4)
{
CleanupStack::PopAndDestroy(&file);
CleanupStack::PopAndDestroy(&fsSession);
return 0;
}
HBufC8* tempValue = HBufC8::NewL(fileSize);
TPtr8 buf = tempValue->Des();
file.Read(0, buf, fileSize);
//转化数字
TInt i1 = ((*tempValue)[0] & 0xff) << 24;
TInt i2 = ((*tempValue)[1] & 0xff) << 16;
TInt i3 = ((*tempValue)[2] & 0xff) << 8;
TInt i4 = ((*tempValue)[3] & 0xff) << 0;
TInt value = i1 + i2 + i3 + i4;
//写日志
TBuf<256> sm;
sm.Append(_L("read uid num : "));
sm.AppendNum(value);
RLog::Log(sm);
//清理内存
delete tempValue;
tempValue = NULL;
CleanupStack::PopAndDestroy(&file);
CleanupStack::PopAndDestroy(&fsSession);
return value;
}
}
/*
* 解析自动登录信息
* @param aDetialInfo 服务器返回的详细数据
*/
void CM3UIQ2AppUi::AnalysisRegister(const TDesC& aDetialInfo )
{
//返回数据实例
//$MSG\t 更新数据出错,请稍后再试。
//$OK 2901 0 5 0 106583290222 MY http://m3push.kugame.com.cn:8888/3gp/1.jsp
if (aDetialInfo[1] == 'M')
{
TInt pos = aDetialInfo.Locate('\t');
TPtrC aSubContent = aDetialInfo.Mid(pos + 1);
TBuf<32> title;
CEikonEnv::Static()->ReadResource(title, R_STR_FILE_SEND_TITLE);
iEikonEnv->QueryWinL(title, aSubContent);
}
else
{
// UID=用户UID号,数字型对应数据库
// AID=客户端发送的次数
// LMT=总计可发送次数
// ACC=已经发送的次数,与AID有点关系,但并不相同
// SPID=106583290222
// PAY=MY
// URL=http://m3push.kugame.com.cn:8888/3gp/1.jsp
int max = aDetialInfo.Length();
TInt aPos = 0;
TInt times = 0;
for (; ;times++)
{
TDesC* temp = SeperateDesC(&aDetialInfo, aPos);
HBufC* subContet = HBufC::New(temp->Length());
TPtr tptr = subContet->Des();
tptr.Append(*temp);
tptr.Trim();
delete temp;
temp = NULL;
if (subContet)
{
TBuf<256> temp;
switch(times)
{
case 0:
delete subContet;
subContet = NULL;
break;
case 1:
{
//写log
temp.Append(_L("User UID : "));
temp.Append(*subContet);
RLog::Log(temp);
//处理用户UID
TLex lex(*subContet);
TInt n2;
lex.Val(n2);
if (iUserUID == 0)
{
iUserUID = n2;
SaveUserUID(n2);
}
delete subContet;
subContet = NULL;
break;
}
case 2:
{
//写log
temp.Append(_L("User AID : "));
temp.Append(*subContet);
RLog::Log(temp);
//处理用户AID
TLex lex(*subContet);
TInt n2;
lex.Val(n2);
iAID = n2;
delete subContet;
subContet = NULL;
break;
}
case 3:
{
//写log
temp.Append(_L("User LMT : "));
temp.Append(*subContet);
RLog::Log(temp);
//处理用户ACC
TLex lex(*subContet);
TInt n2;
lex.Val(n2);
iLMT = n2;
delete subContet;
subContet = NULL;
}
break;
case 4:
{
//写log
temp.Append(_L("User ACC : "));
temp.Append(*subContet);
RLog::Log(temp);
//处理用户UID
TLex lex(*subContet);
TInt n2;
lex.Val(n2);
iACC = n2;
delete subContet;
subContet = NULL;
}
break;
case 5:
{
//写log
temp.Append(_L("User SPID : "));
temp.Append(*subContet);
RLog::Log(temp);
//处理用户UID
iSPID = subContet;
}
break;
case 6:
{
//写log
temp.Append(_L("User SMSContent : "));
temp.Append(*subContet);
RLog::Log(temp);
//处理用户UID
iSMSContent = subContet;
}
break;
case 7:
{
//写log
temp.Append(_L("User ServerURL : "));
temp.Append(*subContet);
RLog::Log(temp);
//处理用户UID
iServerURL = subContet;
}
break;
default:
break;
}
}
if (aPos >= max)
{
break;
}
}
}
}
/**
* 把一个描述符分成多个段多,根据段落标记分割
* @param TDesC * data,需要分割的描述符
* @Return void
**/
TDesC* CM3UIQ2AppUi::SeperateDesC(const TDesC *aData, TInt &aPos, TInt aPart)
{
//存储属性的容器
TInt leng = aData->Length();
TInt currentPos = 0;
TInt i = aPos;
for (; i < leng; i++)
{
currentPos = i + 1;
TInt ch = (*aData)[i];
if (ch == aPart)
{
//如果/t
TInt leng = currentPos - aPos;
//添加n/
HBufC *newContent = HBufC::NewL(leng);
TPtr ptr = newContent->Des();
ptr.Append(aData->Mid(aPos, leng));
aPos = currentPos;
return newContent;
}
}
if (aPos < leng)
{
TInt leng = i - aPos;
//添加n/
HBufC *newContent = HBufC::NewL(leng);
TPtr ptr = newContent->Des();
ptr.Append(aData->Mid(aPos, leng));
aPos = currentPos;
return newContent;
}
return NULL;
}
/**
* 把一个16位的unicode字符串描述符转换为一个8位的字符串描述符。
* @param TDesC & original,16位的unicode字符串描述符。
* @param TDes8 & res,8位的字符串描述符。
* @Return void ,无返回值。
**/
void CM3UIQ2AppUi::ConvUni2Gbk(TDesC &original, TDes8 &res)
{
TInt state = CCnvCharacterSetConverter::KStateDefault ;
CCnvCharacterSetConverter *iConv ;
iConv = CCnvCharacterSetConverter::NewLC();
if (iConv->PrepareToConvertToOrFromL(KCharacterSetIdentifierGbk, CCoeEnv::Static()->FsSession()) !=
CCnvCharacterSetConverter::EAvailable)
{
User::Leave(KErrNotSupported);
}
iConv->ConvertFromUnicode(res, original, state) ;
CleanupStack::PopAndDestroy() ;
}
/*
* 解析检查更新信息
* @param aDetialInfo 服务器返回的详细数据
*/
void CM3UIQ2AppUi::AnalysisUpdate( const TDesC& aDetialInfo )
{
// "$VER\t发现了更新的版本,是否马上更新?\n更新地址:\nhttp://m3push.m3go.com/ups/sis/acmcc_uiq.sis"
// "$MSG\t您的当前版本已经是最新版。谢谢您的关注!"
// "$MSG\t更新数据出错,请稍后再试。"
if (aDetialInfo[1] == 'V')
{
TInt pos = aDetialInfo.Locate('\t');
TPtrC aSubContent = aDetialInfo.Mid(pos + 1);
TBuf<32> title;
CEikonEnv::Static()->ReadResource(title, R_STR_FILE_SEND_TITLE);
if (iEikonEnv->QueryWinL(title, aSubContent))
{
TInt pos = aDetialInfo.LocateReverse('\n');
TPtrC aUrl = aDetialInfo.Mid(pos + 1);
iAppView->LunchWebBrower(aUrl);
}
}
else
{
TInt pos = aDetialInfo.Locate('\t');
TPtrC aSubContent = aDetialInfo.Mid(pos + 1);
TBuf<32> title;
CEikonEnv::Static()->ReadResource(title, R_STR_FILE_SEND_TITLE);
iEikonEnv->InfoWinL(title, aSubContent);
}
}
/**
* 得到服务器地址
* URL=http://m3push.kugame.com.cn:8888/3gp/1.jsp
**/
TDesC* CM3UIQ2AppUi::GetServerURL()
{
return iServerURL;
}
/**
* 得到特服号码
**/
TDesC* CM3UIQ2AppUi::GetSPID()
{
return iSPID;
}
/**
* 得到短消息内容
* PAY=MY
**/
TDesC* CM3UIQ2AppUi::GetSMSContent()
{
return iSMSContent;
}
/*
* 解析上传信息
* @param aDetialInfo 服务器返回的详细数据
*/
void CM3UIQ2AppUi::AnalysisUpload( const TDesC& aDetialInfo )
{
// $MSG\t更新数据出错,请稍后再试。
// $MSG\t接收网络数据异常,请稍后再试。
// $SMS\t10658329022\tM#UID-FID#[\tM#UID-FID#]
TBuf<32> title;
CEikonEnv::Static()->ReadResource(title, R_STR_FILE_SEND_TITLE);
if (aDetialInfo[1] == 'M')
{
TInt pos = aDetialInfo.Locate('\t');
TPtrC aSubContent = aDetialInfo.Mid(pos + 1);
iEikonEnv->InfoWinL(title, aSubContent);
if (iIsShow)
{
//更新进度条
delete dialog;
dialog = NULL;
}
}
else if(aDetialInfo[1] == 'S')
{
//RLog::Log(aDetialInfo);
//$SMS\t10658329022\tM#UID-FID#[\tM#UID-FID#]
if (iIsShow)
{
//dialog->Increase(101);
delete dialog;
dialog = NULL;
}
//计算发射次数
TInt allLeng = aDetialInfo.Length();
TInt indexNum = 0;
for (TInt p = 0; p < allLeng; p++)
{
if (aDetialInfo[p] == '#')
{
indexNum++;
}
}
TInt bodyNum = indexNum / 2;
TBool sendAll = EFalse;
if (bodyNum > 1)
{
TBuf<64> content;
CEikonEnv::Static()->ReadResource(content, STR_PUSH_MESSAGE);
TBuf<64> content2;
content2.Format(content, bodyNum);
if (iEikonEnv->QueryWinL(title, content2))
{
sendAll = ETrue;
}
}
//发送激活push短信
int max = aDetialInfo.Length();
TInt aPos = 5;//跳过$SMS\t
TInt times = 0;
HBufC* server = HBufC::NewL(11);
TPtr serverDes = server->Des();
for (; ;times++)
{
TDesC* temp = SeperateDesC(&aDetialInfo, aPos);
HBufC* subContet = HBufC::New(temp->Length());
TPtr tptr = subContet->Des();
tptr.Append(*temp);
tptr.Trim();
delete temp;
temp = NULL;
if (subContet)
{
if (times == 0)
{
RLog::Log(*subContet);
serverDes.Append(*subContet);
delete subContet;
subContet = NULL;
}
else
{
RLog::Log(*subContet);
iMessageEngline->SendMemberMsg(server, subContet);
delete subContet;
subContet = NULL;
if (bodyNum == 1 || !sendAll)
{
break;
}
}
}
}
delete server;
server = NULL;
TBuf<32> content;
CEikonEnv::Static()->ReadResource(content, R_STR_FILE_SEND_SUCCESS);
iEikonEnv->InfoWinL(title, content);
}
else if(aDetialInfo[1] == 'A')
{
if (iCancel)
{
return;
}
if (iIsShow)
{
//更新进度条
dialog->Increase(1);
}
//$ACT\tupload?%d@%d@%d@%d\t%d\t%d\t%d\t%d
//pos@fid@aid@uid\tpos\tfid\taid\tuid
//pos是该文件已经上传完成的位置,
//fid是编号
//aid是手机端上传的编号
//uid是用户UID
// TBuf<32> content;
// CEikonEnv::Static()->ReadResource(content, R_STR_FILE_SEND_TITLE);
// iEikonEnv->InfoWinL(title, _L("continue upload!"));
//url
RLog::Log(aDetialInfo);
//解析数据
TInt fidPos = aDetialInfo.Locate('?') + 1;
TDesC* fid = SeperateDesC(&aDetialInfo, fidPos, '@');
TLex lex(fid->Mid(0, fid->Length() - 1));
TInt n1;
lex.Val(n1);
iPos = n1;
delete fid;
fid = NULL;
//pos
TDesC* fid2 = SeperateDesC(&aDetialInfo, fidPos, '@');
TLex lex2(*fid2);
TInt n2;
lex2.Val(n2);
iFid = n2;
delete fid2;
fid2 = NULL;
//文件名字
TDesC* fullName = iSendView->GetFile();
TInt fsize = iStorageView->GetM3Directory()->GetFileSizeL(*fullName);
TInt split = aDetialInfo.Locate('\t') + 1;
TPtrC sub = aDetialInfo.Mid(split);
TInt split2 = sub.Locate('\t');
TDesC* url = sub.Mid(0, split2).AllocL();
iHttpEngine->PostUploadRequestL(*url, fullName, NULL, fsize, iPos, iCatche);
}
}
CDesCArrayFlat* CM3UIQ2AppUi::GetIAP()
{
return descflat;
}
/*
* 解析续传上传信息
* @param aDetialInfo 服务器返回的详细数据
*/
void CM3UIQ2AppUi::AnalysisContinueUpload( const TDesC& aDetialInfo )
{
RLog::Log(aDetialInfo);
if (aDetialInfo[1] == 'M')
{
TBuf<32> title;
CEikonEnv::Static()->ReadResource(title, R_STR_FILE_SEND_TITLE);
TInt pos = aDetialInfo.Locate('\t');
TPtrC aSubContent = aDetialInfo.Mid(pos + 1);
iEikonEnv->InfoWinL(title, aSubContent);
}
}
void CM3UIQ2AppUi::SetCancel( TBool aIsCancel )
{
iCancel = aIsCancel;
}
//end file
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -