diff -r 159fc2f68139 -r d59c248c9d36 ImagePrint/ImagePrintEngine/ImagePrintServer/src/server/cimageprintserver.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ImagePrint/ImagePrintEngine/ImagePrintServer/src/server/cimageprintserver.cpp Wed Sep 01 12:30:38 2010 +0100 @@ -0,0 +1,166 @@ +/* +* Copyright (c) 2004-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: +* +*/ + + +#include "cimageprintserver.h" +#include "imageprintclientserver.h" +#include "cimageprintsession.h" +#include "clog.h" +#include "cimageprintbody.h" + +namespace + { + // panic + _LIT( KImagePrintServerPanic, "CIPSer" ); + enum TImagePrintServerPanic + { + EBadDescriptor + }; + + void PanicClient( const RMessage2& aMessage, TImagePrintServerPanic aCategory ) + { + aMessage.Panic( KImagePrintServerPanic, aCategory ); + } + } + + +CImagePrintServer* CImagePrintServer::NewLC() + { + CImagePrintServer* server = new (ELeave) CImagePrintServer(); + CleanupStack::PushL( server ) ; + server->ConstructL(); + return server; + } + + +CImagePrintServer::CImagePrintServer() + : CPolicyServer( 0, KImagePrintPolicy, ESharableSessions ) + { + } + +CImagePrintServer::~CImagePrintServer() + { + LOG("CImagePrintServer::~CImagePrintServer begin"); + delete iEngine; + iFbs.Disconnect(); + LOG("CImagePrintServer::~CImagePrintServer end"); + } + +void CImagePrintServer::ConstructL() + { + LOG("CImagePrintServer::ConstructL begin"); + StartL( KImagePrintServerName ); + User::LeaveIfError( iFbs.Connect() ); + iEngine = CImagePrintBody::NewL(); + LOG("CImagePrintServer::ConstructL end"); + } + +void CImagePrintServer::AddSession() + { + LOG("CImagePrintServer::AddSession begin"); + ++iConnsCount; + LOG("CImagePrintServer::AddSession end"); + } + +void CImagePrintServer::RemoveSession() + { + --iConnsCount; + LOG1("CImagePrintServer::RemoveSession iConnsCount: %d", iConnsCount); + if( iConnsCount == 0 ) + { + delete iEngine; + iEngine = NULL; + iFbs.Disconnect(); + CActiveScheduler::Stop(); + } + LOG("CImagePrintServer::RemoveSession end"); + } + +TInt CImagePrintServer::SessionCount() const + { + LOG("CImagePrintServer::SessionCount begin"); + LOG1("CImagePrintServer::SessionCount return: %d", iConnsCount); + return iConnsCount; + } + +TInt CImagePrintServer::RunError( TInt aError ) + { + LOG1("CImagePrintServer::RunError aError: %d", aError); + if( aError == KErrBadDescriptor ) + { + PanicClient( Message(), EBadDescriptor ); + } + else + { + Message().Complete( aError ); + } + ReStart(); + LOG("CImagePrintServer::RunError end"); + return KErrNone; + } + + +CSession2* CImagePrintServer::NewSessionL( const TVersion& aVersion, const RMessage2& ) const + { + LOG("CImagePrintServer::NewSessionL begin"); + TBool supported = User::QueryVersionSupported( TVersion( KImagePrintServerMajor, + KImagePrintServerMinor, + KImagePrintServerBuild ), + aVersion ); + if( !supported ) + { + User::Leave( KErrNotSupported ); + } + + LOG("CImagePrintServer::NewSessionL end"); + return new (ELeave) CImagePrintSession(); + } + +TInt CImagePrintServer::ReserveEngine( const CSession2* aSession ) + { + LOG("CImagePrintServer::ReserveEngine begin"); + TInt err( KErrInUse ); + if( iEngineHolder == aSession || !iEngineHolder ) + { + iEngineHolder = aSession; + err = KErrNone; + } + LOG1("CImagePrintServer::ReserveEngine return: %d", err); + return err; + } + +TInt CImagePrintServer::ReleaseEngine( const CSession2* aSession ) + { + LOG("CImagePrintServer::ReleaseEngine begin"); + TInt err( KErrInUse ); + if( iEngineHolder == aSession || !iEngineHolder ) + { + iEngineHolder = NULL; + err = KErrNone; + } + LOG1("CImagePrintServer::ReleaseEngine return: %d", err); + return err; + } + +CImagePrintBody& CImagePrintServer::Engine() const + { + LOG("CImagePrintServer::Engine begin"); + LOG("CImagePrintServer::Engine end"); + return *iEngine; + } + +// End of File