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

📄 smbmusicapsyncservercontentsservicedeleteitem.cpp

📁 索爱相关代码。实现功能是server。很有参考价值。代码很难弄到。symbian。
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/* Copyright (C) 2006 Sony Ericsson Mobile Communications Japan, Inc. */
/*-------------------------------------------------------------------------*/
// FileName:
//  SmbMusicAPSyncServerContentsServiceDeleteItem.cpp
//
// Description:
//  傾僀僥儉嶍彍梫媮僒乕價僗
/*------------------------------------------------------------------------*/
//曄峏棜楌
//擔晅          |曄峏幰     |撪梕
//--------------+-----------+----------------------------------------------
//2006/06/11	|娵壀		| 怴婯嶌惉
//2006/08/17	|娵壀		| 俆侽審埲忋偺慡審嶍彍偵懳墳乮戝暆側廋惓乯
//2006/09/18	|SDNA 壀嶳	| TRK9202懳墳
//2006/10/20	|K3悪杮		| 僐儊儞僩廋惓丒晄梫僿僢僟偺嶍彍
//2006/10/25	|K3悪杮		| 儘僌儗儀儖廋惓


#ifndef __SMBMUSICAPSYNCSERVERCONTENTSSERVICEDELETEITEM_H__
#include "SmbMusicAPSyncServerContentsServiceDeleteItem.h"
#endif

#ifndef __E32ERR_H__
#include <e32err.h>	//  僄儔乕僐乕僪
#endif	//  __E32ERR_H__


#ifndef __SMBMUSICAPSYNCSERVERDEF_H__
#include <SmbMusicAPSyncServerDef.h>
#endif	//  __SMBMUSICAPSYNCSERVERDEF_H__

#ifndef __SMBMUSICMWLIBCLIENT_H__
#include <SmbMusicMWLibClient.h>	//  CSmbMusicMWLibPLItem
#endif	//  __SMBMUSICMWLIBCLIENT_H__

#ifndef __SMBMUSICAPSYNCSERVERMODEL_H__
#include "SmbMusicAPSyncServerModel.h"
#endif	//  __SMBMUSICAPSYNCSERVERMODEL_H__

#ifndef __SMBMUSICAPSYNCSERVERCONTENTSFUNC_H__
#include "SmbMusicAPSyncServerContentsFunc.h"
#endif	//  __SMBMUSICAPSYNCSERVERCONTENTSFUNC_H__

#ifndef __SMBMUSICAPSYNCSERVERCONTENTSIMAGEDATAMANAGER_H__
#include "SmbMusicAPSyncServerContentsImageDataManager.h"
#endif	//  __SMBMUSICAPSYNCSERVERCONTENTSIMAGEDATAMANAGER_H__

#ifndef __SMBMUSICAPSYNCSERVERCONTENTSSCREENTRACEMANAGER_H__
#include "SmbMusicAPSyncServerContentsScreenTraceManager.h"
#endif	//  __SMBMUSICAPSYNCSERVERCONTENTSSCREENTRACEMANAGER_H__

#ifndef __SMBMUSICAPSYNCSERVERCONTENTSASYNCOBSERVER_H__
#include "SmbMusicAPSyncServerContentsAsyncObserver.h"
#endif	//  __SMBMUSICAPSYNCSERVERCONTENTSASYNCOBSERVER_H__

#ifndef __SMBMUSICAPSYNCSERVERCONTENTSMANAGERINTERFACE_H__
#include "SmbMusicAPSyncServerContentsManagerInterface.h"
#endif	//	__SMBMUSICAPSYNCSERVERCONTENTSMANAGERINTERFACE_H__

#ifndef __SMBMUSICAPSYNCSERVERCONTENTSPLAYSONGINFOMANAGER_H__
#include "SmbMusicAPSyncServerContentsPlaySongInfoManager.h"
#endif	//	__SMBMUSICAPSYNCSERVERCONTENTSPLAYSONGINFOMANAGER_H__

#ifndef __SMBMUSICAPSYNCSERVERCONTENTSAPPNOTIFYMANAGER_H__
#include "SmbMusicAPSyncServerContentsAppNotifyManager.h"
#endif	//  __SMBMUSICAPSYNCSERVERCONTENTSAPPNOTIFYMANAGER_H__

#ifndef __SMBMUSICAPSYNCSERVERCONTENTSLIST_H__
#include "SmbMusicAPSyncServerContentsList.h"
#endif	//  __SMBMUSICAPSYNCSERVERCONTENTSLIST_H__

USING_NAMESPACE_SEMCJ


/**
 *  僨僗僩儔僋僞
 **/
CSmbMusicAPSyncServerContentsServiceDeleteItem::~CSmbMusicAPSyncServerContentsServiceDeleteItem()
	{

	if (IsActive() != EFalse)
		{
		CancelService();
		}
	// 擮偺偨傔丄僉儍儞僙儖偵偰Complete偡傞
	MessageComplete(KErrCancel);

	//強桳偟偰偄傞僆僽僕僃僋僩傪嶍彍偡傞
	DeleteObject();
	}


/**
 *  僐儞僗僩儔僋僞
 *
 *  @param[in]	aRlog				儘僌僒乕僶
 *  @param[in]	aCommandObserver	僐儅儞僪僆僽僓乕僶
 *  @param[in]	aFunc				僼傽儞僋僔儑儞
 *  @param[in]	aImageData			僀儊乕僕僨乕僞僐儞僩儘乕儔
 *  @param[in]	aScreenData			僗僋儕乕儞僩儗乕僗儅僱乕僕儍
 *  @param[in]	aObserver			旕摨婜僆僽僓乕僶
 *  @param[in]	aRMessage			僋儔僀傾儞僩偐傜偺儊僢僙乕僕
 **/
CSmbMusicAPSyncServerContentsServiceDeleteItem::CSmbMusicAPSyncServerContentsServiceDeleteItem(
			DCM_NAMESPACE::RLog& aRlog,
			CSmbMusicAPSyncServerModel& aModel,
			MSmbMusicAPSyncServerContentsAsyncObserver& aObserver,
			CSmbMusicAPSyncServerContentsFunc& aFunc,
			MSmbMusicAPSyncServerContentsManagerInterface& aMgrIf,
			CSmbMusicAPSyncServerContentsScreenTraceManager& aScreenData,
			const RMessage2& aRMessage):
			CSmbMusicAPSyncServerContentsServiceBase(aRlog, aModel, aObserver, aFunc,
			aMgrIf, aScreenData, aRMessage),
			iState(EIdleState)
	{
	}


/**
 *  僒乕價僗偺奐巒梫媮
 * @param [in]	側偟
 *  @return	僒乕價僗張棟偺宲懕忬嫷
 */
TSmbMusicAPSyncServerContentsServiceState CSmbMusicAPSyncServerContentsServiceDeleteItem::StartServiceL()
	{
	if(EIdleState != iState)
		{
		//忬懺偑偢傟偰偄傞
		TInt log = EMusicAPSyncServerClassNumber_ContentsServiceDeleteItem | EMusicAPSyncServerLocationNumber06;
		_LIT(KContentsServiceDeleteItem06, "SyncServerContentsServiceDeleteItem::StartServiceL State Error = %d");
		SmbMusicAPSyncServerLog(iRLog, log, ELogLevelHighest, KContentsServiceDeleteItem06, iState);

		//強桳偟偰偄傞僆僽僕僃僋僩傪嶍彍偡傞
		DeleteObject();

		//梫媮傪張棟偱偒傞忬懺偱偼側偄偺偱僄儔乕偱姰椆偡傞
		return CompleteThisService(KErrServerBusy);
		}

	//梫媮儊僢僙乕僕偺撪梕傪儊儞僶曄悢偵僐僺乕偡傞
	ReadParamFromMsgL();

	//儕僗僩傪庢摼偡傞
	iListHandle = iReqPkg->iData.iDeleteItem.iItems.iListHandle;
	iList = iScreenData.GetList(iListHandle);
	if(NULL == iList)
		{
		//巜掕偝傟偨儕僗僩偑懚嵼偟側偄帠偼側偄偺偱
		TInt log = EMusicAPSyncServerClassNumber_ContentsServiceDeleteItem | EMusicAPSyncServerLocationNumber00;
		_LIT(KContentsServiceDeleteItem00, "SyncServerContentsServiceDeleteItem::StartServiceL NotFoundList");
//  MODIFY-S  儘僌儗儀儖廋惓
		SmbMusicAPSyncServerLog(iRLog, log, ELogLevelHigh, KContentsServiceDeleteItem00);
//  MODIFY-E  儘僌儗儀儖廋惓

		//強桳偟偰偄傞僆僽僕僃僋僩傪嶍彍偡傞
		DeleteObject();

		//婎杮揑偵偙偙偵偔傞偙偲偼側偄偺偱廔椆偟傑偡
		return CompleteThisService(KErrNotFound);
		}

	//慡審嶍彍僼儔僌傪尒傑偡
	iAllDelete = iReqPkg->iData.iDeleteItem.iItems.iAllItem;
	if(EFalse != iAllDelete)
		{
		//慡審嶍彍偺応崌
		//儕僗僩偵娷傑傟傞傾僀僥儉悢亖嶍彍偡傞傾僀僥儉悢
		iDeleteCount = iList->GetItemCount();
		if(0 == iDeleteCount)
			{
			//強桳偟偰偄傞僆僽僕僃僋僩傪嶍彍偡傞
			DeleteObject();

			//嶍彍偡傞傾僀僥儉偑偁傝傑偣傫
			return CompleteDelete(KErrNone);
			}
		if(NULL != iIndex)
			{
			delete iIndex;
			iIndex = NULL;
			}
		iIndex = new(ELeave)RArray<TInt>(iDeleteCount);
		for(TInt i = 0; i < iDeleteCount; i++)
			{
			//嶍彍偡傞Index攝楍傪嶌惉偟傑偡乮MW亅傾僾儕娫偱Index偵僘儗偑偁傞偺偱偦傟偺曗惓偺偨傔亄侾偡傞乯
			iIndex->Append(i + 1);
			}
		}

	//嶍彍懳徾傾僀僥儉偺Index傪僜乕僩偟傑偡
	iIndex->Sort();
	//堦墳嶍彍姰椆傾僀僥儉悢傪弶婜壔偡傞
	iCompleteDeleteCount = 0;
	//嶍彍慜偵庢摼偟偨傾僀僥儉悢傪弶婜壔偡傞
	iGetItemCount		= 0;
	//嶍彍懳徾偺嬋傾僀僥儉傪惗惉偡傞
	return CreateListItemsL();
	}


/**
 *  僒乕價僗僄儔乕捠抦
 *
 *  @param[in]	aError	僄儔乕僐乕僪
 **/
TSmbMusicAPSyncServerContentsServiceState CSmbMusicAPSyncServerContentsServiceDeleteItem::ServiceErr(TInt aError)
	{
	//偲傝偁偊偢儘僌偱傕
	TInt log = EMusicAPSyncServerClassNumber_ContentsServiceDeleteItem | EMusicAPSyncServerLocationNumber04;
	_LIT(KContentsServiceDeleteItem04, "SyncServerContentsServiceDeleteItem::ServiceErr = %d, State = %d");
//  MODIFY-S  儘僌儗儀儖廋惓
	SmbMusicAPSyncServerLog(iRLog, log, ELogLevelHigh, KContentsServiceDeleteItem04, aError, iState);
//  MODIFY-E  儘僌儗儀儖廋惓

	TSmbMusicAPSyncServerContentsServiceState retState = ESmbMusicAPSyncServerContetnsServiceStateErr;
	TBool res = EFalse;

	switch(iState)
		{
	///<傾僀僥儉惗惉忬懺
	case ECreateItemState:
//		CancelCreateItem();
		break;

	///<傾僀僥儉嶍彍忬懺
	case EDeleteState:
		//嶍彍偡傞傾僀僥儉偑懠偵偁傟偽張棟傪宲懕偟傑偡
		res = CheckErrState();
		if(EFalse != res)
			{
			//嶍彍張棟傪幚峴偟傑偡
			TRAPD(error, retState = DeleteItemsL());
			if(KErrNone == error)
				{
				//嶍彍張棟傪宲懕偡傞
				return retState;
				}
			//Leave偑敪惗偟偨偺偱張棟偼廔椆偟傑偡
			log = EMusicAPSyncServerClassNumber_ContentsServiceDeleteItem | EMusicAPSyncServerLocationNumber12;
			_LIT(KContentsServiceDeleteItem12, "SyncServerContentsServiceDeleteItem::ServiceErr = %d, Leave Error  = %d");
			SmbMusicAPSyncServerLog(iRLog, log, ELogLevelHighest, KContentsServiceDeleteItem12, aError, error);
			}

		//嶍彍僀儀儞僩傪傾僾儕偵捠抦偡傞
		NotifyEvent();
		break;

	default:
		log = EMusicAPSyncServerClassNumber_ContentsServiceDeleteItem | EMusicAPSyncServerLocationNumber13;
		_LIT(KContentsServiceDeleteItem13, "SyncServerContentsServiceDeleteItem::ServiceErr default aError = %d");
		SmbMusicAPSyncServerLog(iRLog, log, ELogLevelHighest, KContentsServiceDeleteItem13, aError);
		break;
		}

	//婎杮揑偵偙偙偵偔傞偙偲偼側偄偺偱廔椆偟傑偡
	CompleteThisService(aError);

	//強桳偟偰偄傞僆僽僕僃僋僩傪嶍彍偡傞
	DeleteObject();

	//埨掕忬懺偵栠偡
	iState = EIdleState;

	return ESmbMusicAPSyncServerContetnsServiceStateErr;
	}


/**
 *  僒乕價僗僉儍儞僙儖捠抦
 * @param [in]	側偟
 *  @return	僒乕價僗張棟偺宲懕忬嫷
 */
void CSmbMusicAPSyncServerContentsServiceDeleteItem::CancelService()
	{
	TInt res = KErrCancel;
	switch(iState)
		{
	///<梫媮側偟忬懺
	case EIdleState:
		//張棟柍偟偱廔椆偡傞
		res = KErrNone;
		break;

	///<傾僀僥儉惗惉忬懺
	case ECreateItemState:
		CancelCreateItem();
		break;

	///<傾僀僥儉嶍彍忬懺
	case EDeleteState:
		//嶍彍姰椆張棟
		CancelDeleteItem();
		break;

	default:
		//婎杮揑偵偙偙偵偔傞偙偲偼側偄偺偱廔椆偟傑偡
		res = KErrServerBusy;
		break;
		}

	//偲傝偁偊偢曉帠傪敪峴偟傑偡
	CompleteThisService(res);

	//強桳偟偰偄傞僆僽僕僃僋僩傪嶍彍偡傞
	DeleteObject();

	Cancel();
	}


/**
 *  僒乕價僗宲懕張棟
 * @param [in]	側偟
 *  @return	僒乕價僗張棟偺宲懕忬嫷
 */
TSmbMusicAPSyncServerContentsServiceState CSmbMusicAPSyncServerContentsServiceDeleteItem::ContinueServiceL()
	{
	TSmbMusicAPSyncServerContentsServiceState retState = ESmbMusicAPSyncServerContetnsServiceStateContinue;
	switch(iState)
		{
	///<梫媮側偟忬懺
	case EIdleState:
		//張棟柍偟偱廔椆偡傞
		retState = CompleteThisService(KErrServerBusy);
		break;

	///<傾僀僥儉惗惉忬懺
	case ECreateItemState:
		//嶍彍張棟傊堏峴偟傑偡
		retState = PrePareDeleteItemsL();
		break;

	///<傾僀僥儉嶍彍忬懺
	case EDeleteState:
		//嶍彍屻偺屻巒枛
		CheckDeleteItems();

		//傾僀僥儉嶍彍張棟傪懕偗傞偐廔偊傞偐傪敾抐偡傞
		retState = DeleteItemContinueORFinish();
		break;

	default:
		//婎杮揑偵偙偙偵偔傞偙偲偼側偄偺偱廔椆偟傑偡
		retState = CompleteThisService(KErrServerBusy);
		break;
		}

	return retState;
	}

/**
 *  僉儍儞僙儖梫媮偵懳偡傞僒乕價僗僉儍儞僙儖敾掕
 *
 *  @param[in]	aCancelEvent	僉儍儞僙儖梫媮偝傟偨僀儀儞僩僞僀僾
 *
 *  @return	僉儍儞僙儖傪庴偗傞偐偳偆偐偺敾掕(ETrue:梫媮僉儍儞僙儖丄EFalse:梫媮傪僉儍儞僙儖偟側偄)
 **/
TBool CSmbMusicAPSyncServerContentsServiceDeleteItem::CheckCancel(TSmbMusicAPSyncServerFunction aCancelEvent)
	{
	if (aCancelEvent == ESmbMusicAPSyncServerFuncCancelDeleteItems)
		{	//  帺僒乕價僗偺僉儍儞僙儖梫媮偺応崌
		TInt log = EMusicAPSyncServerClassNumber_ContentsServiceDeleteItem | EMusicAPSyncServerLocationNumber14;
		_LIT(KContentsServiceDeleteItem14, "SyncServerContentsServiceDeleteItem::CheckCancel");
		SmbMusicAPSyncServerLog(iRLog, log, ELogLevelLowest, KContentsServiceDeleteItem14);

		return ETrue;
		}
	return EFalse;
	}

/**
 *  梫媮儊僢僙乕僕偺撪梕傪僐僺乕偡傞
 * @param [in]	側偟
 * @return		側偟
 */
void CSmbMusicAPSyncServerContentsServiceDeleteItem::ReadParamFromMsgL()
	{
	//梫媮儊僢僙乕僕偺撪梕傪惗惉
	iReqPkg = new(ELeave)TSmbMusicAPSyncServerContentsReqPkg;
	iReqTPckg = new(ELeave)TPckg<TSmbMusicAPSyncServerContentsReqPkg>(*iReqPkg);

	//庴怣儊僢僙乕僕傪僐僺乕偡傞
	iRMessage.ReadL(KSmbMusicAPSyncEngineMsgIn1, *iReqTPckg);

	if(EFalse != iReqPkg->iData.iDeleteItem.iItems.iAllItem)
		{
		//慡審嶍彍偺応崌丄攝楍偑梡堄偝傟偰偄側偄偺偱儊僢僙乕僕偺Read偼偙偙傑偱
		return;
		}

	//嶍彍偡傞傾僀僥儉攝楍傪僐僺乕偟傑偡
	TInt leng = iRMessage.GetDesLength(KSmbMusicAPSyncEngineMsgIn3);
	iDeleteCount = leng / sizeof(TInt);
	//嶍彍懳徾傾僀僥儉偺屄悢傪挷傋傑偡
	if(iDeleteCount > 0)
		{
		iIndex = new(ELeave)RArray<TInt>(iDeleteCount);
		TInt dummyInt = 1;
		//僨傿僗僋儕僾僞偺僐僺乕愭椞堟傪惗惉偟傑偡
		for(TInt i = 0; i < iDeleteCount; i++)
			{
			iIndex->AppendL(dummyInt);
			}
		TPtr8 arrayData((TUint8*)&(*iIndex)[0], leng);
		//庴怣儊僢僙乕僕傪僐僺乕偡傞
		iRMessage.ReadL(KSmbMusicAPSyncEngineMsgIn3, arrayData);
		//MW-傾僾儕娫偱Index偺僘儗偑偁傞偺偱曗惓偡傞
		for(TInt j = 0; j < iDeleteCount; j++)
			{
			(*iIndex)[j]++;
			}
		}
	else
		{
		//嶍彍懳徾偑巜掕偝傟偰偄側偄偺偱張棟傪拞抐偟傑偡
		//偲傝偁偊偢儘僌偱傕
		TInt log = EMusicAPSyncServerClassNumber_ContentsServiceDeleteItem | EMusicAPSyncServerLocationNumber07;
		_LIT(KContentsServiceDeleteItem07, "SyncServerContentsServiceDeleteItem::ReadParamFromMsgL Error = %d");
		SmbMusicAPSyncServerLog(iRLog, log, ELogLevelHighest, KContentsServiceDeleteItem07, leng);

		//堷悢偑晄惓側偺偱Leave偟傑偡
		User::Leave(KErrArgument);
		}
	}

/**
 *  傾僀僥儉嶍彍張棟偺慜弨旛
 * @param [in]	側偟
 * @return		僒乕價僗偺忬懺
 */
TSmbMusicAPSyncServerContentsServiceState CSmbMusicAPSyncServerContentsServiceDeleteItem::
PrePareDeleteItemsL()
	{
	TSmbMusicAPSyncServerContentsServiceState retState =
						ESmbMusicAPSyncServerContetnsServiceStateContinue;

	CSmbMusicMWLibMusicItem* item = NULL;
	TInt cnt = iLibImteArray->Count();
	if(1 > cnt)
		{
		//偲傝偁偊偢儘僌偱傕
		TInt log = EMusicAPSyncServerClassNumber_ContentsServiceDeleteItem | EMusicAPSyncServerLocationNumber01;
		_LIT(KContentsServiceDeleteItem01, "SyncServerContentsServiceDeleteItem::PrePareDeleteItemsL NotFoundCreatedItem %d");
		SmbMusicAPSyncServerLog(iRLog, log, ELogLevelHighest, KContentsServiceDeleteItem01, cnt);

		//傾僀僥儉偑庢摼偱偒側偐偭偨
		DeleteObject();
		//婎杮揑偵偙偙偵偔傞偙偲偼側偄偺偱廔椆偟傑偡
		retState = CompleteThisService(KErrArgument);
		return retState;
		}

	//嶍彍偡傞傾僀僥儉Index攝楍偺撉傒崬傒埵抲
	TInt indexOffset = (*iIndex)[iGetItemCount];
	//惗惉偟偨傾僀僥儉攝楍偐傜嶍彍懳徾傾僀僥儉傪揈弌偡傞
	for(TInt i = 0; i < cnt; i++)
		{
		//嶍彍偡傞傾僀僥儉偺Index偵埵抲偡傞傾僀僥儉傪揈弌偡傞

⌨️ 快捷键说明

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