--- /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