mmresourcemgmt/mmresctrl/src/mmrcclient/mmrcclientimplementation.cpp
changeset 0 40261b775718
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmresourcemgmt/mmresctrl/src/mmrcclient/mmrcclientimplementation.cpp	Tue Feb 02 01:56:55 2010 +0200
@@ -0,0 +1,246 @@
+// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+#include "mmrcclientimplementation.h"
+#include "mmrcclientmsgqueuehandler.h"
+#include "multimediaresourcecontrolobserver.h"
+#include "audiocontext.h"
+
+#include <a3f/maudiocontextobserver.h>
+
+
+const TInt KMsgQueueSlots = 8;
+
+ 
+/**
+ */
+CMMRCClientImplementation::CMMRCClientImplementation(MMultimediaResourceControlObserver& aCallback) 
+: iObserver(aCallback)
+	{
+	TRACE_CREATE();
+	DP_CONTEXT(----> CMMRCClientImplementation::CMMRCClientImplementation *CD1*, CtxDevSound, DPLOCAL);
+	DP_IN();
+	DP_OUT();
+	}
+
+/**
+ */
+CMMRCClientImplementation::~CMMRCClientImplementation()
+	{
+	DP_CONTEXT(----> CMMRCClientImplementation::~CMMRCClientImplementation *CD1*, CtxDevSound, DPLOCAL);
+	DP_IN();
+
+	if(iMsgClientQueueHandler)
+		{
+		delete iMsgClientQueueHandler;
+		}
+	iMsgQueue.Close();
+
+	DP_OUT();
+	}
+
+/**
+ */
+CMMRCClientImplementation* CMMRCClientImplementation::NewL(MMultimediaResourceControlObserver& aCallback)
+	{
+	DP_STATIC_CONTEXT(----> CMMRCClientImplementation::NewL *CD1*, CtxDevSound, DPLOCAL);
+	DP_IN();
+	
+	CMMRCClientImplementation* self = new (ELeave) CMMRCClientImplementation(aCallback);
+	CleanupStack::PushL (self);
+	self->ConstructL ();
+	CleanupStack::Pop (self);
+
+	DP0_RET(self, "0x%x");
+	}
+
+/**
+ */
+void CMMRCClientImplementation::ConstructL()
+	{
+	DP_CONTEXT(----> CMMRCClientImplementation::ConstructL *CD1*, CtxDevSound, DPLOCAL);
+	DP_IN();
+	
+	TInt error = iMMRCClientSession.Open (iObserver);
+	if ( KErrNotFound == error)
+		{
+		//The server is not found, create it
+		error = iMMRCClientSession.StartServer ();
+		User::LeaveIfError (error);
+
+		//Try again to create a connection to it
+		error = iMMRCClientSession.Open (iObserver);
+		#ifdef _DEBUG	
+		if(error != KErrNone)
+			{
+			RDebug::Print(_L("!!!!CMMRCClientImplementation::ConstructL - Open session 2 - error = %d"), error);
+			}
+		#endif
+		User::LeaveIfError (error);
+		}
+	#ifdef _DEBUG	
+	if(error != KErrNone)
+		{
+		RDebug::Print(_L("!!!!CMMRCClientImplementation::ConstructL - Open session 1 - error = %d"), error);
+		}
+	#endif
+	User::LeaveIfError (error);
+
+	//Create an un-named msg queue, a handle is needed to connect to it.
+	error = iMsgQueue.CreateGlobal (KNullDesC, KMsgQueueSlots,	EOwnerProcess);
+	#ifdef _DEBUG	
+	if(error != KErrNone)
+		{
+		RDebug::Print(_L("!!!!CMMRCClientImplementation::ConstructL - CreateGlobal - error = %d"), error);
+		}
+	#endif
+	User::LeaveIfError (error);
+	iMsgClientQueueHandler = CMMRCClientMsgQueueHandler::NewL (iMsgQueue, *this);
+
+	//Forward the message queue handle to the server, which will connect to it.
+	iMMRCClientSession.InitializeServerL(iMsgQueue);
+	
+	DP_OUT();
+	}
+/**
+ */
+TUint64 CMMRCClientImplementation::LogOn(TProcessId aProcessId)
+	{
+	DP_CONTEXT(----> CMMRCClientImplementation::LogOn *CD1*, CtxDevSound, DPLOCAL);
+	DP_IN();
+	
+	TUint64 contextId = iMMRCClientSession.LogOn(aProcessId);
+	
+	DP0_RET(contextId, "contextId = %d");
+	}
+
+/**
+ */
+void CMMRCClientImplementation::Close()
+	{
+	DP_CONTEXT(----> CMMRCClientImplementation::Close *CD1*, CtxDevSound, DPLOCAL);
+	DP_IN();
+
+	iMMRCClientSession.Close ();
+
+	DP_OUT();
+	}
+
+/**
+ */
+TInt CMMRCClientImplementation::SendResourceRequest(MLogicalChain* aLogicalChainLastCommited, MLogicalChain* aLogicalChainRequested, CAudioContext* aContext)
+	{
+	DP_CONTEXT(----> CMMRCClientImplementation::SendResourceRequest *CD1*, CtxDevSound, DPLOCAL);
+	DP_IN();
+	
+	TInt err = iMMRCClientSession.SendResourceRequest(aLogicalChainLastCommited, aLogicalChainRequested, aContext);
+	
+	DP0_RET(err, "err = %d");
+	}
+
+/**y
+ */
+void CMMRCClientImplementation::HandleMessage(TMMRCQueueItem& aMessage)
+	{
+ 	DP_CONTEXT(----> CMMRCClientImplementation::HandleMessage *CD1*, CtxDevSound, DPLOCAL);
+	DP_IN();
+	
+	#ifdef _DEBUG	
+		RDebug::Print(_L("RMMRCClientSession::ResourceRequestResponseL aMessage.iRequestType = %d, aMessage.iResult = %d, aMessage.iErrorCode = %d"), aMessage.iRequestType, aMessage.iResult, aMessage.iErrorCode);
+	#endif
+	
+	switch(aMessage.iRequestType)
+	{
+	
+	case EMMRCRequestCommitUpdate:
+		{
+		// Ignore this, now this will come directly from adaptation
+		// iObserver.ReceiveResourceUpdate(aMessage.iData, aMessage.iErrorCode);
+		}
+		break;
+
+	case EMMRCRequestCommitResponse:
+		{
+		// This would remain coming throug MMRC to update client side
+		iMMRCClientSession.ResourceRequestResponse(aMessage.iData, aMessage.iResult, aMessage.iErrorCode);
+		}
+		break;
+
+	case EMMRCRequestResourceUnallocated:
+		{
+		// Notification used for APR.
+		iObserver.CanResume();
+		}
+		break;
+		
+	default: //unknown message
+		#ifdef _DEBUG	
+			ASSERT(0);
+			RDebug::Print(_L("!!!!CMMRCClientImplementation::HandleMessage - Unknown message"));
+		#endif
+		break;
+	}
+	
+	DP_OUT();
+	}
+
+/**
+ */
+TInt CMMRCClientImplementation::RegisterAsClient(TUid aEventType, const TDesC8& aNotificationRegistrationData)
+	{
+	DP_CONTEXT(----> CMMRCClientImplementation::RegisterAsClient *CD1*, CtxDevSound, DPLOCAL);
+	DP_IN();
+	
+	TInt err = iMMRCClientSession.RegisterAsClient(aEventType, aNotificationRegistrationData);
+
+	DP0_RET(err, "err = %d");
+	}
+	
+	
+/**
+ */
+TInt CMMRCClientImplementation::CancelRegisterAsClient(TUid aEventType)
+	{
+	DP_CONTEXT(----> CMMRCClientImplementation::CancelRegisterAsClient *CD1*, CtxDevSound, DPLOCAL);
+	DP_IN();
+
+	TInt err = iMMRCClientSession.CancelRegisterAsClient(aEventType);
+
+	DP0_RET(err, "err = %d");
+	}
+	
+
+/**
+ */
+TInt CMMRCClientImplementation::WillResumePlay()
+	{
+	DP_CONTEXT(----> CMMRCClientImplementation::WillResumePlay *CD1*, CtxDevSound, DPLOCAL);
+	DP_IN();
+
+	TInt err = iMMRCClientSession.WillResumePlay();
+
+	DP0_RET(err, "err = %d");
+	}
+	
+void CMMRCClientImplementation::ResetMessages()
+	{
+	DP_CONTEXT(----> CMMRCClientImplementation::ResetMessages *CD1*, CtxDevSound, DPLOCAL);
+	DP_IN();
+
+	iMMRCClientSession.ResetMessages();
+
+	DP_OUT();
+	}
+//EOF