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

📄 smbmusicapsyncserverappfunc.cpp

📁 索爱相关代码。实现功能是server。很有参考价值。代码很难弄到。symbian。
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/* Copyright (C) 2006 Sony Ericsson Mobile Communications Japan, Inc. */
/*--------------------------------------------------------------------*/
// FileName:
//	SmbMusicAPSyncServerAppFunc.cpp
//
// Description:
//	PTX810 Music傾僾儕 摨婜僒乕僶 傾僾儕摨婜僋儔僗
/*--------------------------------------------------------------------*/
//曄峏棜楌
//擔晅			|曄峏幰			|撪梕
//--------------+---------------+--------------------------------------
//2006/05/31	|暯壀			|怴婯嶌惉
//2006/07/19	|娵壀			|TRK4008懳墳
//----PTX824----+---------------+--------------------------------------
//2007/04/18	|K3悪杮			|PTX824懳墳(堦妵儔僀僙儞僗僠僃僢僋幚峴忬嫷愝掕/庢摼懳墳)


#ifndef __SMBMUSICAPSYNCSERVERAPPFUNC_H__
#include "SmbMusicAPSyncServerAppFunc.h"
#endif

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

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

#ifndef	__SMBMUSICAPSYNCSERVERUTIL_H__
#include "SmbMusicAPSyncServerUtil.h"
#endif	//  __SMBMUSICAPSYNCSERVERUTIL_H__


USING_NAMESPACE_SEMCJ

/**
 僐儞僗僩儔僋僞
 * @param [in]	aModel		僒乕僶儌僨儖僋儔僗偺嶲徠
 * @param [in]	aLog		儘僌僒乕僶僙僢僔儑儞偺嶲徠
 * @return	側偟
 */
CSmbMusicAPSyncServerAppFunc::CSmbMusicAPSyncServerAppFunc(CSmbMusicAPSyncServerModel& aModel, DCM_NAMESPACE::RLog& aLog)
	: iModel(aModel), iLog(aLog)
	{
	}

/**
 僨僗僩儔僋僞
 * @param	側偟
 * @return	側偟
 */
CSmbMusicAPSyncServerAppFunc::~CSmbMusicAPSyncServerAppFunc()
	{
	iActiveSession = NULL;

	//僀儀儞僩捠抦梫媮偺儊僢僙乕僕傪姰椆偝偣傞
	for ( TInt i = 0; i < iNotifyMessage.Count(); i++)
		{
		// 墳摎儊僢僙乕僕傪Write
		iNotifyMessage[0].Complete(KErrServerTerminated);
		iNotifyMessage.Remove(0);
		}

	//梫媮儊僢僙乕僕傪姰椆偝偣傞
	if(iReqCount > 0)
		{
		//梫媮儊僢僙乕僕傪強桳偟偰偄傞応崌丄梫媮傪捠抦
		iReqMessage.Complete(KErrServerTerminated);

		//梫媮儊僢僙乕僕傪僨僋儕儊儞僩偡傞
		iReqCount--;
		}

//@@TRK4008懳墳		Start
	//僀儀儞僩傪僉儏乕偟偰偄傟偽攋婞偡傞
	TInt cnt = iSession.Count();
	for(TInt i = 0; i < cnt; i++)
		{
		iSession[0].iEvent.Close();
		iSession.Remove(0);
		}
	//慡偰偺Array傪Close偡傞
	iSession.Close();
//@@TRK4008懳墳		End

	iNotifyMessage.Close();
	}

/**
 愙懕梫媮
 * @param [in]	aSession	愙懕偡傞僙僢僔儑儞
 * @return	側偟
 */
void CSmbMusicAPSyncServerAppFunc::Connect(CSession2& aSession)
	{
	// 傾僋僥傿僽僙僢僔儑儞偑愝掕偝傟偰偄側偗傟偽傾僋僥傿僽僙僢僔儑儞偲偟偰儊儞僶曄悢偵曐懚
	if (NULL == iActiveSession)
		{
		//	傾僋僥傿僽側僙僢僔儑儞傪曐懚偡傞
		iActiveSession = &aSession;
		}

	//僀儀儞僩偺攝怣愭偲偟偰僙僢僔儑儞傪搊榐偡傞
	TSmbMusicAPSyncServerAppEventRequestSession requestSession;
	requestSession.iConnectSession = &aSession;
	//僒乕僶偲愙懕偟偨僙僢僔儑儞傪搊榐偡傞
	iSession.Append(requestSession);
	}

/**
 愗抐梫媮
 * @param [in]	aSession	愗抐偡傞僙僢僔儑儞
 * @return	側偟
 */
void CSmbMusicAPSyncServerAppFunc::DisConnect(CSession2& aSession)
	{
	//傾僋僥傿僽僙僢僔儑儞傪僋儕傾
	iActiveSession = NULL;

	//僀儀儞僩捠抦梫媮偺儊僢僙乕僕傪扵偡
	for ( TInt i = iNotifyMessage.Count(); i > 0; i--)
		{
		if (iNotifyMessage[i-1].Session() == &aSession )
			{
			// 墳摎儊僢僙乕僕傪Write
			iNotifyMessage[i-1].Complete(KErrNone);
			iNotifyMessage.Remove(i-1);
			}
		}

	if(iReqCount > 0)
		{
		//梫媮儊僢僙乕僕傪強桳偟偰偄傞応崌
		if(&aSession == iReqMessage.Session())
			{
			// 梫媮傪捠抦
			iReqMessage.Complete(KErrDisconnected);

			//梫媮儊僢僙乕僕傪僨僋儕儊儞僩偡傞
			iReqCount--;
			}
		}

//@@TRK4008懳墳		Start
	// Model偑強桳偟偰偄傞session傪愗抐
	iModel.DisConnect(aSession);

	//搊榐偟偰偄傞僙僢僔儑儞傪嶍彍偡傞
	RemoveSession(aSession);
//	TInt cnt = iSession.Count();
//	for(TInt i = 0; i < cnt; i++)
//		{
//		//搊榐偟偰偄傞僙僢僔儑儞傪嶍彍偡傞
//		if(&aSession == iSession[i].iConnectSession)
//			{
//			iSession.Remove(i);
//			}
//		}
//@@TRK4008懳墳		End
	}

/**
 Hold梫媮捠抦
 * @param [in]	aMessage	僋儔僀傾儞僩偐傜搉偝傟偨僨乕僞傪奿擺偟偨儊僢僙乕僕偺嶲徠
 * @return	側偟
 */
void CSmbMusicAPSyncServerAppFunc::NotifyHoldReq(const RMessage2& aMessage)
	{
	// Read偺栠傝抣
	TInt ret = KErrNone;

	// 梫媮儊僢僙乕僕偺撪梕(Hold棟桼)傪庢摼
	TSmbMusicAPSyncServerAppSyncReqPkg reqPkg;
	TPckg<TSmbMusicAPSyncServerAppSyncReqPkg> p(reqPkg);

	ret = aMessage.Read(0,p);
	if (KErrNone != ret)
		{
		// 儘僌弌椡
		TInt log = EMusicAPSyncServerClassNumber11 | EMusicAPSyncServerLocationNumber00;
		_LIT(KAppFuncLog00, "SyncServerAppFunc::NotifyHoldReq");
		SmbMusicAPSyncServerLog(iLog, log, ELogLevelHighest, KAppFuncLog00);

		//僀儀儞僩傪攝怣偣偢偵姰椆
		aMessage.Complete(KErrNone);

		return;
		}

	// 墳摎儊僢僙乕僕傪嶌惉
	TSmbMusicAPSyncEngineSyncEvent res;
	res.iType = ESmbMusicAPSyncEngineHoldApp;
	res.iInfo = reqPkg.iData.iSyncMsg.iInfo;

//@@TRK4008懳墳		Start
	CSession2* session;
	session = aMessage.Session();
	//攝怣偡傞僀儀儞僩傪搊榐偡傞
	AppendReuqestEvent(*session, res);
	//僀儀儞僩傪攝怣偡傞
	BroadCast();

//	for ( TInt i = iNotifyMessage.Count(); i > 0; i--)
//		{
//		if (iNotifyMessage[i-1].Session() != session )
//			{
//			// 墳摎儊僢僙乕僕傪Write
//			TPckg<TSmbMusicAPSyncEngineSyncEvent> pRes(res);
//			iNotifyMessage[i-1].WriteL(1, pRes);
//			iNotifyMessage[i-1].Complete(KErrNone);
//			iNotifyMessage.Remove(i-1);
//			}
//		}
//@@TRK4008懳墳		End
	//梫媮偵懳偟偰墳摎傪曉偡
	aMessage.Complete(KErrNone);
	}

/**
 Hold夝彍梫媮捠抦
 * @param [in]	aMessage	僋儔僀傾儞僩偐傜搉偝傟偨僨乕僞傪奿擺偟偨儊僢僙乕僕偺嶲徠
 * @return	側偟
 */
void CSmbMusicAPSyncServerAppFunc::NotifyCancelHoldReq(const RMessage2& aMessage)
	{
	// 墳摎儊僢僙乕僕傪嶌惉
	TSmbMusicAPSyncEngineSyncEvent res;
	res.iType = ESmbMusicAPSyncEngineCancelHoldApp;

//@@TRK4008懳墳		Start
	CSession2* session;
	session = aMessage.Session();
	//攝怣偡傞僀儀儞僩傪搊榐偡傞
	AppendReuqestEvent(*session, res);
	//僀儀儞僩傪攝怣偡傞
	BroadCast();

//	for ( TInt i = iNotifyMessage.Count(); i > 0; i--)
//		{
//		if (iNotifyMessage[i-1].Session() != session )
//			{
//			// 墳摎儊僢僙乕僕傪Write
//			TPckg<TSmbMusicAPSyncEngineSyncEvent> pRes(res);
//			iNotifyMessage[i-1].WriteL(1, pRes);
//			iNotifyMessage[i-1].Complete(KErrNone);
//			iNotifyMessage.Remove(i-1);
//			}
//		}
//@@TRK4008懳墳		End
	//梫媮偵懳偟偰墳摎傪曉偡
	aMessage.Complete(KErrNone);
	}

/**
 強桳尃夝曻梫媮捠抦
 * @param [in]	aMessage	僋儔僀傾儞僩偐傜搉偝傟偨僨乕僞傪奿擺偟偨儊僢僙乕僕偺嶲徠
 * @return	側偟
 */
void CSmbMusicAPSyncServerAppFunc::NotifyReleaseReq(const RMessage2& aMessage)
	{
	CSession2* session;
	session = aMessage.Session();

	// 墳摎儊僢僙乕僕傪嶌惉
	TSmbMusicAPSyncEngineSyncEvent res;
	res.iType = ESmbMusicAPSyncEngineRequestReleaseSyncServer;

	if (session == iActiveSession)
		{
		// 強桳尃傪偡偱偵曐帩偟偰偄傞応崌丄偦偺傑傑姰椆
		aMessage.Complete(KErrNone);
		}
	else
		{
		//梫媮儊僢僙乕僕偑偡偱偵偁傞応崌偼丄僄儔乕傪曉偡
		if (0 != iReqCount)
			{
			aMessage.Complete(KErrServerBusy);

			// 儘僌弌椡
			TInt log = EMusicAPSyncServerClassNumber11 | EMusicAPSyncServerLocationNumber07;
			_LIT(KAppFuncLog07, "SyncServerAppFunc::NotifyReleaseReq");
			SmbMusicAPSyncServerLog(iLog, log, ELogLevelHighest, KAppFuncLog07);

			return;
			}

		// 強桳尃傪曐帩偡傞僋儔僀傾儞僩偵懳偟偰夝曻梫媮傪捠抦
		iReqMessage = aMessage;
		//梫媮儊僢僙乕僕傪僀儞僋儕儊儞僩偡傞
		iReqCount++;

//@@TRK4008懳墳		Start
		//攝怣偡傞僀儀儞僩傪搊榐偡傞
		AppendReuqestEvent(*session, res);
		//僀儀儞僩傪攝怣偡傞
		BroadCast();

//		for ( TInt i = iNotifyMessage.Count(); i > 0; i--)
//			{
//			if (iNotifyMessage[i-1].Session() != session )
//				{
//				// 墳摎儊僢僙乕僕傪Write
//				TPckg<TSmbMusicAPSyncEngineSyncEvent> pRes(res);
//				iNotifyMessage[i-1].WriteL(1, pRes);
//				iNotifyMessage[i-1].Complete(KErrNone);
//				iNotifyMessage.Remove(i-1);
//				}
//			}
//@@TRK4008懳墳		End
		}
	}

/**
 強桳尃夝曻墳摎
 * @param [in]	aMessage	僋儔僀傾儞僩偐傜搉偝傟偨僨乕僞傪奿擺偟偨儊僢僙乕僕偺嶲徠
 * @return	側偟
 */
void CSmbMusicAPSyncServerAppFunc::ReturnReleaseRes(const RMessage2& aMessage)
	{
	// Read丒Write偺栠傝抣
	TInt ret = KErrNone;

	CSession2* session;
	session = aMessage.Session();

	// 僒乕僶偱曐帩偟偰偄傞傾僋僥傿僽僙僢僔儑儞偐傜偺墳摎偺応崌
	if (session == iActiveSession)
		{
		// 強桳尃夝曻梫媮尦傪傾僋僥傿僽僙僢僔儑儞偲偟偰曐帩
		iActiveSession = iReqMessage.Session();

		// 梫媮儊僢僙乕僕偺撪梕(夝曻墳摎寢壥)傪庢摼
		TSmbMusicAPSyncServerAppSyncReqPkg reqPkg;
		TPckg<TSmbMusicAPSyncServerAppSyncReqPkg> p(reqPkg);

		ret = aMessage.Read(0,p);
		if (KErrNone != ret)
			{
			// 儘僌弌椡
			TInt log = EMusicAPSyncServerClassNumber11 | EMusicAPSyncServerLocationNumber01;
			_LIT(KAppFuncLog01, "SyncServerAppFunc::ReturnReleaseRes Read() Err(%d)");
			SmbMusicAPSyncServerLog(iLog, log, ELogLevelHighest, KAppFuncLog01, ret);
			}
		else	// Read惉岟
			{
			// 墳摎儊僢僙乕僕傪嶌惉
			TInt res;
			res = reqPkg.iData.iSyncMsg.iInfo.iParam1;

			// 墳摎儊僢僙乕僕傪Write
			TPckg<TInt> pRes(res);
			ret = iReqMessage.Write(1, pRes);

			if (KErrNone != ret)
				{
				// 儘僌弌椡
				TInt log = EMusicAPSyncServerClassNumber11 | EMusicAPSyncServerLocationNumber02;
				_LIT(KAppFuncLog02, "SyncServerAppFunc::ReturnReleaseRes Write() Err(%d)");

⌨️ 快捷键说明

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