diff -r 000000000000 -r 3ce708148e4d customization/ScreenSaverAdapter/ScreenSaverServer/src/ScreenSaverServer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/customization/ScreenSaverAdapter/ScreenSaverServer/src/ScreenSaverServer.cpp Thu Dec 17 08:40:12 2009 +0200 @@ -0,0 +1,214 @@ +/* +* 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 "ScreenSaverServer.h" +#include "ScreenSaverClientServer.h" +#include "ScreenSaverSession.h" + +#include "debug.h" + + + + + +// ---------------------------------------------------------------------------------------- +// Server startup code +// ---------------------------------------------------------------------------------------- +static void RunServerL() + { + // naming the server thread after the server helps to debug panics + __UHEAP_MARK; + + User::LeaveIfError(User::RenameThread(KDMSSServerName)); + + // create and install the active scheduler + + CActiveScheduler* s=new(ELeave) CActiveScheduler; + CleanupStack::PushL(s); + CActiveScheduler::Install(s); + __UHEAP_MARK; + + // create the server (leave it on the cleanup stack) + CServer2 *t = CScreenSaverServer::NewLC(); + // Initialisation complete, now signal the client + + RProcess::Rendezvous(KErrNone); + + // Ready to run + RDEBUG("CScreenSaverServer is running"); + CActiveScheduler::Start(); + + + // Cleanup the server and scheduler + CleanupStack::PopAndDestroy(t); + __UHEAP_MARKEND; + + CleanupStack::PopAndDestroy(s); + __UHEAP_MARKEND; + } + +// Server process entry-point +TInt E32Main() + { + __UHEAP_MARK; + RDEBUG("CScreenSaverServer: E32Main"); + CTrapCleanup* cleanup=CTrapCleanup::New(); + TInt r=KErrNoMemory; + if (cleanup) + { + TRAP(r,RunServerL()); + RDEBUG_2("CScreenSaverServer closed with code: %d", r); + delete cleanup; + } + __UHEAP_MARKEND; + return r; + } + + + + +// ----------------------------------------------------------------------------- +// CShutDown::CShutdown() +// ----------------------------------------------------------------------------- + +inline CShutdown::CShutdown() + :CTimer(-1) + { + CActiveScheduler::Add(this); + } + + +// ----------------------------------------------------------------------------- +// CShutDown::ConstructL() +// ----------------------------------------------------------------------------- + +inline void CShutdown::ConstructL() + { + CTimer::ConstructL(); + } + +// ----------------------------------------------------------------------------- +// CShutDown::Start() +// ----------------------------------------------------------------------------- + +inline void CShutdown::Start() + { + + RDEBUG( "creenSaverServer: starting shutdown timeout" ); + + After(KScreenSaverServerShutdownDelay); + //SetActive(); + } + +// ----------------------------------------------------------------------------- +// CShutDown::RunL() +// ----------------------------------------------------------------------------- + +void CShutdown::RunL() + { + RDEBUG( "creenSaverServer timeout ... closing" ); + CActiveScheduler::Stop(); + } + + + + +CServer2* CScreenSaverServer::NewLC() + { + RDEBUG("CScreenSaverServer::NewLC - start"); + + CScreenSaverServer* self=new(ELeave) CScreenSaverServer; + CleanupStack::PushL(self); + self->ConstructL(); + RDEBUG("CScreenSaverServer::NewLC - end"); + return self; + } + + + +void CScreenSaverServer::ConstructL() + { + RDEBUG("CScreenSaverServer::ConstructL start"); + + StartL(KDMSSServerName); + iShutdown.ConstructL(); + iShutdown.Start(); + + RDEBUG("CScreenSaverServer::ConstructL end"); + } + + +CScreenSaverServer::CScreenSaverServer() :CServer2(0) + { + RDEBUG("CScreenSaverServer::CScreenSaverServer()"); + } + // ----------------------------------------------------------------------------- +// CApplicationManagementServer::AddSession() +// ----------------------------------------------------------------------------- + +void CScreenSaverServer::AddSession() + { + // A new session is being created + RDEBUG( "CScreenSaverServer::AddSession" ); + ++iSessionCount; + + // Cancel the shutdown timer if it was running + iShutdown.Cancel(); + } + + +// ----------------------------------------------------------------------------- +// CApplicationManagementServer::DropSession() +// ----------------------------------------------------------------------------- + +void CScreenSaverServer::DropSession() + { + // A session is being destroyed + RDEBUG( "CScreenSaverServer::DropSession" ); + + // Start the shutdown timer if it is the last session + if ( --iSessionCount == 0 ) + { + iShutdown.Start(); + } + } + + + + +CScreenSaverServer::~CScreenSaverServer() + { + RDEBUG("CScreenSaverServer::CScreenSaverServer()"); + } + + + +CSession2* CScreenSaverServer::NewSessionL(const TVersion&,const RMessage2&) const + { + RDEBUG("CScreenSaverServer::NewSessionL"); + return new (ELeave) CScreenSaverSession(); + } + + +void CScreenSaverServer::GetAvailableScreenSaversL(RImplInfoPtrArray& aScreenSaverList) + { + RDEBUG("CScreenSaverServer::GetAvailableScreenSavers()"); + CScreensaverPluginInterfaceDefinition::ListImplementationsL( aScreenSaverList ); + REComSession::FinalClose(); + }