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

📄 m3uiq2appui.cpp

📁 symbian uiq 例子代码,功能包括文件断点续传、编辑通讯录、后台短信回复等
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	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 + -