customization/ScreenSaverAdapter/ScreenSaverServer/src/ScreenSaverSession.cpp
changeset 0 3ce708148e4d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/customization/ScreenSaverAdapter/ScreenSaverServer/src/ScreenSaverSession.cpp	Thu Dec 17 08:40:12 2009 +0200
@@ -0,0 +1,186 @@
+/*
+* 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;
+		}
+	}
+