customization/ScreenSaverAdapter/ScreenSaverServer/src/ScreenSaverSession.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 17 Dec 2009 08:40:12 +0200
changeset 0 3ce708148e4d
permissions -rw-r--r--
Revision: 200949 Kit: 200951

/*
* Copyright (c) 2007 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: Implementation of customization components
*
*/
 

#include <mmf/common/mmfcontrollerpluginresolver.h>
#include "ScreenSaverSession.h"
#include "ScreenSaverClientServer.h"
#include <badesca.h>
#include "debug.h"
#include <ecom/implementationinformation.h>
#include <e32cmn.h>
#include <f32file.h>

CScreenSaverSession::CScreenSaverSession()
	{
	RDEBUG("CScreenSaverSession::CScreenSaverSession");
	}


CScreenSaverSession::~CScreenSaverSession()
	{
	RDEBUG("CScreenSaverSession::~CScreenSaverSession");
	Server().DropSession();
	}

CScreenSaverServer& CScreenSaverSession::Server()
	{
	return *static_cast<CScreenSaverServer*>(const_cast<CServer2*>(CSession2::Server()));
	}

// ----------------------------------------------------------------------------------------
// CScreenSaverSession::CreateL
// 2nd phase construct for sessions - called by the CServer framework
// ----------------------------------------------------------------------------------------
void CScreenSaverSession::CreateL()
	{
	RDEBUG("CScreenSaverSession::CreateL");
	Server().AddSession();
	
	}


void CScreenSaverSession::ServiceL(const RMessage2& aMessage)
	{
	TRAPD(err,DispatchMessageL(aMessage));
	aMessage.Complete(err);
	}

void CScreenSaverSession::ServiceError(const RMessage2& aMessage,TInt aError)
	{
	RDEBUG_2("CScreenSaverSession::ServiceError %d",aError);
	CSession2::ServiceError(aMessage,aError);
	}
	

void CScreenSaverSession::DispatchMessageL(const RMessage2& aMessage)
	{
	
	switch(aMessage.Function())
		{
		case EGetAvailableScreenSavers:
			{
			RDEBUG("	DispatchMessageL case: EGetAvailableScreenSavers");
			
			
			RImplInfoPtrArray screenSaverList;
			CleanupResetAndDestroyPushL( screenSaverList ); 
			Server().GetAvailableScreenSaversL(screenSaverList);
			
			TInt ssCount(0);
			ssCount = screenSaverList.Count();
			RDEBUG_2("	DispatchMessageL case: EGetAvailableScreenSavers : SSCount : %d",ssCount);
			HBufC8* buffer = HBufC8::NewLC((sizeof(TUid)*ssCount)+sizeof(TInt8));
   			TPtr8 bufPtr = buffer->Des();
   			
   			RDesWriteStream stream;
			stream.Open( bufPtr );
			
			CleanupClosePushL(stream);
			
			const TInt count = screenSaverList.Count();
			
			stream.WriteUint8L(TUint(count));
			for ( TInt i = 0 ; i < count ; i++ )
				{
				CImplementationInformation* implInfo = screenSaverList[i];
				stream.WriteInt32L( implInfo->ImplementationUid().iUid);
				}
			stream.CommitL();
		    aMessage.WriteL( 0, bufPtr, 0 );

		    CleanupStack::PopAndDestroy(&stream);
		    	
		    CleanupStack::PopAndDestroy(buffer);
		    	
		    CleanupStack::PopAndDestroy( &screenSaverList ); // screenSaverList
		    
			}
			break;
		
		case EGetscreensaverInfo:
			{
			RDEBUG("	DispatchMessageL case: EGetscreensaverInfo");
			
			RImplInfoPtrArray screenSaverList;
			CleanupResetAndDestroyPushL( screenSaverList ); 
			
			Server().GetAvailableScreenSaversL(screenSaverList);
			
			TInt ssCount(0);
			ssCount = screenSaverList.Count();
			RDEBUG_2("	DispatchMessageL case: EGetscreensaverInfo : SSCount : %d",ssCount);
			
			HBufC8* buffer = HBufC8::NewLC(KSSInfoBufferLength*ssCount);
   			TPtr8 bufPtr = buffer->Des();
   			
   			RDesWriteStream stream;
			stream.Open( bufPtr );
			CleanupClosePushL(stream);
			
			const TInt count = screenSaverList.Count();
			
			stream.WriteUint8L(TUint(count));
			
			for ( TInt i = 0 ; i < count ; i++ )
				{
					CImplementationInformation* implInfo = screenSaverList[i];
					
					stream.WriteInt32L( implInfo->ImplementationUid().iUid);	//Uid
					stream.WriteInt32L( implInfo->Version());					//Version
					
					stream.WriteInt32L( implInfo->DisplayName().Length());	//Dispaly  Name		
					stream << implInfo->DisplayName();
					
					stream.WriteInt32L( implInfo->OpaqueData().Length());   //Opaque Data
					stream << implInfo->OpaqueData();
					
				}
			stream.CommitL();
		    aMessage.WriteL( 0, bufPtr, 0 );

		    CleanupStack::PopAndDestroy(&stream);
		    CleanupStack::PopAndDestroy(buffer);
		    CleanupStack::PopAndDestroy( &screenSaverList );
		    
			}
			break;
		
		case EScreenSaversCount:
			{
			RDEBUG("	DispatchMessageL case: EScreenSaversCount");
				
			RImplInfoPtrArray screenSaverCount;
			CleanupResetAndDestroyPushL( screenSaverCount ); 
			TInt count(0);
			
			Server().GetAvailableScreenSaversL(screenSaverCount);
			
			count = screenSaverCount.Count();
			TPckgBuf<TInt>ssCount(count);

			aMessage.WriteL(0,ssCount);
			CleanupStack::Pop(&screenSaverCount)	;
		    screenSaverCount.ResetAndDestroy();
			
			}
			break;
		default:
			break;
		}
	}