--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/customization/ScreenSaverAdapter/ScreenSaverServer/src/ScreenSaverSession.cpp Wed Sep 01 12:31:32 2010 +0100
@@ -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;
+ }
+ }
+