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

📄 smbmusicapsyncserverextrafunc.cpp

📁 索爱相关代码。实现功能是server。很有参考价值。代码很难弄到。symbian。
💻 CPP
字号:
/* Copyright (C) 2006 Sony Ericsson Mobile Communications Japan, Inc. */
/*--------------------------------------------------------------------*/
// FileName:
//	SmbMusicAPSyncServerAppFunc.cpp
//
// Description:
//	PTX810 Music傾僾儕摨婜僒乕僶捛壛僀儀儞僩僋儔僗
/*--------------------------------------------------------------------*/
//曄峏棜楌
//擔晅			|曄峏幰			|撪梕
//--------------+---------------+--------------------------------------
//2006/06/23	|娵壀			|怴婯嶌惉
//2006/09/30	|暯壀			|USAT REFRESH懳墳(TRK10775)
//2006/10/16	|娵壀			|DB暅媽梡偺僀儀儞僩捛壛懳墳
//2006/10/18	|暯壀			|TRK11655懳墳


#ifndef __SMBMUSICAPSYNCSERVEREXTRAFUNC_H__
#include "SmbMusicAPSyncServerExtraFunc.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	側偟
 */
CSmbMusicAPSyncServerExtraFunc::CSmbMusicAPSyncServerExtraFunc(CSmbMusicAPSyncServerModel& aModel, DCM_NAMESPACE::RLog& aLog)
	: iModel(aModel), iLog(aLog)
	{
	}

/**
 僨僗僩儔僋僞
 * @param	側偟
 * @return	側偟
 */
CSmbMusicAPSyncServerExtraFunc::~CSmbMusicAPSyncServerExtraFunc()
	{
	//僀儀儞僩捠抦梡儊僢僙乕僕偺Array傪僋儘乕僘偡傞
	iNotifyMessage.Close();
	//僀儀儞僩僉儏乕傪僋儘乕僘偡傞
	TInt cnt = iSession.Count();
	for(TInt i = 0; i < cnt; i++)
		{
		iSession[i].iEvent.Close();
		}
	iSession.Close();
	}

/**
 愙懕梫媮
 * @param [in]	aSession	愙懕偡傞僙僢僔儑儞
 * @return	側偟
 */
void CSmbMusicAPSyncServerExtraFunc::Connect(CSession2& aSession)
	{
	//僀儀儞僩偺攝怣愭偲偟偰僙僢僔儑儞傪搊榐偡傞
	TSmbMusicAPSyncServerExtraEventRequestSession requestSession;
	requestSession.iConnectSession = &aSession;
	//僒乕僶偲愙懕偟偨僙僢僔儑儞傪搊榐偡傞
	iSession.Append(requestSession);
	}

/**
 愗抐梫媮
 * @param [in]	aSession	愗抐偡傞僙僢僔儑儞
 * @return	側偟
 */
void CSmbMusicAPSyncServerExtraFunc::DisConnect(CSession2& aSession)
	{

	for ( TInt i = iNotifyMessage.Count(); i > 0; i--)
		{
		if (iNotifyMessage[i-1].Session() == &aSession )
			{
			// 墳摎儊僢僙乕僕傪Write
			iNotifyMessage[i-1].Complete(KErrNone);
			iNotifyMessage.Remove(i-1);
			break;
			}
		}

	//愙懕偟偰偄傞僙僢僔儑儞偺悢
	TInt cnt = iSession.Count();
	//僀儀儞僩攝怣僉儏乕傪嶍彍偡傞
	for(TInt i = 0; i < cnt; i++)
		{
		if(iSession[i].iConnectSession == &aSession)
			{
			//愗抐偡傞僙僢僔儑儞偺僀儀儞僩攝怣僉儏乕傪嶍彍偡傞
			iSession[i].iEvent.Close();
			iSession.Remove(i);
			break;
			}
		}

	// Model偑強桳偟偰偄傞session傪愗抐
	iModel.DisConnect(aSession);
	}

/**
 僀儀儞僩捠抦梫媮曐懚
 * @param [in]	aMessage	僋儔僀傾儞僩偐傜搉偝傟偨僨乕僞傪奿擺偟偨儊僢僙乕僕偺嶲徠
 * @return	側偟
 */
void CSmbMusicAPSyncServerExtraFunc::StackNotifyMsg(const RMessage2& aMessage)
	{
	// 僀儀儞僩捠抦梫媮傪曐懚
	iNotifyMessage.Append(aMessage);

	//僀儀儞僩傪攝怣偡傞乮僀儀儞僩偑僉儏乕偝傟偰偄側偗傟偽壗傕偟側偄)
	BroadCast();
	}

/**
 僀儀儞僩捠抦梫媮偺僉儍儞僙儖
 * @param [in]	aMessage	僋儔僀傾儞僩偐傜搉偝傟偨僨乕僞傪奿擺偟偨儊僢僙乕僕偺嶲徠
 * @return	側偟
 */
void CSmbMusicAPSyncServerExtraFunc::CancelStackNotifyMsg(const RMessage2& aMessage)
	{
	CSession2* session;
	TInt ret = KErrNone;

	session = aMessage.Session();
	for ( TInt i = iNotifyMessage.Count(); i > 0; i--)
		{
		// 曐懚偟偰偄傞僀儀儞僩捠抦梫媮偲堷悢偺session偑摨偠傕偺偵懳偟偰姰椆偝偣傞
		if (iNotifyMessage[i-1].Session() == session )
			{
			iNotifyMessage[i-1].Complete(KErrNone);
			iNotifyMessage.Remove(i-1);
			}
		}
	aMessage.Complete(ret);
	}

/**
 傾僾儕働乕僔儑儞廔椆捠抦
 * @param [in]	aMessage	僋儔僀傾儞僩偐傜搉偝傟偨僨乕僞傪奿擺偟偨儊僢僙乕僕偺嶲徠
 * @return	側偟
 */
void CSmbMusicAPSyncServerExtraFunc::NotifyAppExitL(const RMessage2& aMessage)
	{
	CSession2* session;

	session = aMessage.Session();

	for ( TInt i = iNotifyMessage.Count(); i > 0; i--)
		{
		if (iNotifyMessage[i-1].Session() == session )
			{
			// 墳摎儊僢僙乕僕傪Write
			iNotifyMessage[i-1].Complete(KErrNone);
			iNotifyMessage.Remove(i-1);
			}
		}
	aMessage.Complete(KErrNone);
	}

/**
 僀儀儞僩傪捠抦偡傞
 * @param[in]	aEvent	捠抦僀儀儞僩
 * @param[in]	aInfo	僀儀儞僩撪梕
 * @return	側偟
 */
//@@TRK11655懳墳	Start
//void CSmbMusicAPSyncServerExtraFunc::SendNotify(TSmbMusicAPSyncEngineExtraEventType aEvent,
//													TSmbMusicAPSyncEngineExtMemType aInfo)
void CSmbMusicAPSyncServerExtraFunc::SendNotify(TSmbMusicAPSyncEngineExtraEventType aEvent,
												TSmbMusicAPSyncEngineExtEventInfo1 aInfo)
//@@TRK11655懳墳	End
	{
	//僋儔僀傾儞僩傊偺僀儀儞僩峔憿懱
	TSmbMusicAPSyncEngineExtraEvent	event;
	//捠抦僀儀儞僩偵傛偭偰張棟傪暘偗傞
	switch(aEvent)
		{
	//奜晹儊儌儕偺敳嫀敪惗
	case ESmbMusicAPSyncEngineRemoveExtMem:
	//奜晹儊儌儕偺憓擖敪惗
	case ESmbMusicAPSyncEngineInsertExtMem:
//TRK10775懳墳 Add-S
	//USAT REFRESH
	case ESmbMusicAPSyncEngineUsatRefresh:
//TRK10775懳墳 Add-E
//TRK11655懳墳 Add-S
	///<DB暅媽捠抦
	case ESmbMusicAPSyncEngineDBRecdover:
//TRK11655懳墳 Add-E
		event.iType = aEvent;
		break;

	default:
		//偦傟埲奜側偺偱僀儀儞僩捠抦偟傑偣傫
		return;
		}

	//僀儀儞僩撪梕偵傛偭偰張棟傪暘偗傞
	switch(aInfo)
		{
	//儊儌儕庬暿偑MS
	case ESmbMusicAPSyncEngineMS:
	//儊儌儕庬暿偑SD
	case ESmbMusicAPSyncEngineSD:
//TRK10775懳墳 Add-S
	//USAT REFRESH
	case ESmbMusicAPSyncEngineUSAT:
//TRK10775懳墳 Add-E
		event.iInfo.iParam1 = aInfo;
		event.iInfo.iParam2 = 0;
		break;

	default:
		//偦傟埲奜側偺偱僀儀儞僩捠抦偟傑偣傫
		return;
		}

	//攝怣偡傞僀儀儞僩傪僉儏乕偵搊榐偡傞
	AppendReuqestEvent(event);
	//僀儀儞僩傪攝怣偡傞
	BroadCast();

	//僀儀儞僩撪梕傪儊僢僙乕僕偵Write偡傞偨傔偺僷僢働乕僕傪梡堄偡傞
//	TPckg<TSmbMusicAPSyncEngineExtraEvent> pkg(event);
//	TInt cnt = iNotifyMessage.Count();
//	//曐帩偟偰偄傞慡偰偺儊僢僙乕僕偵僀儀儞僩傪敪峴偟傑偡
//	TInt res = KErrNone;
//	for ( TInt i = 0; i < cnt; i++)
//		{
//		// 墳摎儊僢僙乕僕傪敪峴
//		res = iNotifyMessage[0].Write(1, pkg);
//		if(KErrNone != res)
//			{
//			//儊僢僙乕僕偵彂偒崬傒幐攕
//			iNotifyMessage[0].Complete(KErrGeneral);
//			iNotifyMessage.Remove(0);
//			//儘僌弌椡
//			TInt log = EMusicAPSyncServerClassNumber06 | EMusicAPSyncServerLocationNumber00;
//			_LIT(KServerPlayerFunc00, "SyncServerExtraFunc::SendNotify Write Error = %d");
//			SmbMusicAPSyncServerLog(iLog, log, ELogLevelHighest, KServerPlayerFunc00, res);
//			}
//		else
//			{
//			//惓忢廔椆
//			iNotifyMessage[0].Complete(KErrNone);
//			iNotifyMessage.Remove(0);
//			}
//		}
	}

/**
 攝怣偡傞僀儀儞僩傪搊榐偡傞
 * @param [in]	aEvent		攝怣偡傞僀儀儞僩
 * @return	側偟
 */
void CSmbMusicAPSyncServerExtraFunc::AppendReuqestEvent(TSmbMusicAPSyncEngineExtraEvent& aEvent)
	{
	//僒乕僶偲愙懕偟偰偄傞僙僢僔儑儞悢
	TInt cnt = iSession.Count();
	for(TInt i = 0; i < cnt; i++)
		{
		//攝怣僀儀儞僩傪僉儏乕僀儞僌偡傞
		iSession[i].iEvent.Append(aEvent);
		}
	}

/**
搊榐偝傟偨僀儀儞僩傪攝怣偡傞
 * @return	側偟
 */
void CSmbMusicAPSyncServerExtraFunc::BroadCast()
	{
	// Write偺栠傝抣
	TInt ret = KErrNone;

	//僒乕僶偲愙懕偟偰偄傞僙僢僔儑儞悢
	TInt cnt = iSession.Count();
	for(TInt i = 0; i < cnt; i++)
		{
		//僀儀儞僩偑僉儏乕偝傟偰偄傟偽攝怣偡傞
		if(iSession[i].iEvent.Count() > 0)
			{
			//攝怣愭偺Watcher傪扵偡
			for ( TInt j = iNotifyMessage.Count(); j > 0; j--)
				{
				//僀儀儞僩偑僉儏乕偝傟偰偄傞僙僢僔儑儞偺Watcher傪扵偡
				if (iNotifyMessage[j-1].Session() == iSession[i].iConnectSession )
					{
					// 墳摎儊僢僙乕僕傪Write
					TPckg<TSmbMusicAPSyncEngineExtraEvent> pRes(iSession[i].iEvent[0]);
					ret = iNotifyMessage[j-1].Write(1, pRes);
					if (KErrNone != ret)
						{
						// 儘僌弌椡
						TInt log = EMusicAPSyncServerClassNumber06 | EMusicAPSyncServerLocationNumber00;
						_LIT(KServerPlayerFunc00, "SyncServerExtraFunc::BroadCast Write Error = %d");
						SmbMusicAPSyncServerLog(iLog, log, ELogLevelHighest, KServerPlayerFunc00, ret);

						// Write偵幐攕偟偨偺偱丄僀儀儞僩攝怣傪峴傢側偄
						iNotifyMessage[j-1].Complete(KErrWrite);
						}
					else	// Write偵惉岟
						{
						iNotifyMessage[j-1].Complete(KErrNone);
						}

					iNotifyMessage.Remove(j-1);
					//僉儏乕偝傟偰偄傞僀儀儞僩傪嶍彍偡傞
					iSession[i].iEvent.Remove(0);
					//僉儏乕傪攋婞偟偨偺偱2抜栚偺儖乕僾傪敳偗傑偡
					break;
					}
				}
			}
		}
	}

// end of SmbMusicAPSyncServerAppFunc.cpp
/* Copyright (C) 2006 Sony Ericsson Mobile Communications Japan, Inc. */

⌨️ 快捷键说明

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