diff -r acc370d7f2f6 -r 2275db202402 DirectPrint/DirectPrintServer/src/directprintserver.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/DirectPrint/DirectPrintServer/src/directprintserver.cpp Tue May 11 14:10:02 2010 +0800 @@ -0,0 +1,166 @@ +/* +* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd. +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "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: +* Kanrikogaku Kenkyusho, Ltd. - Initial contribution +* +* Contributors: +* +* Description: +* +*/ + + +#include "directprintserver.h" +#include "directprintclientserver.h" +#include "directprintsession.h" +#include "clog.h" +#include "directprintbody.h" + +namespace + { + // panic + _LIT( KDirectPrintServerPanic, "CIPSer" ); + enum TDirectPrintServerPanic + { + EBadDescriptor + }; + + void PanicClient( const RMessage2& aMessage, TDirectPrintServerPanic aCategory ) + { + aMessage.Panic( KDirectPrintServerPanic, aCategory ); + } + } + + +CDirectPrintServer* CDirectPrintServer::NewLC() + { + CDirectPrintServer* server = new (ELeave) CDirectPrintServer(); + CleanupStack::PushL( server ) ; + server->ConstructL(); + return server; + } + + +CDirectPrintServer::CDirectPrintServer() + : CPolicyServer( 0, KDirectPrintPolicy, ESharableSessions ) + { + } + +CDirectPrintServer::~CDirectPrintServer() + { + LOG("CDirectPrintServer::~CDirectPrintServer begin"); + delete iEngine; + iFbs.Disconnect(); + LOG("CDirectPrintServer::~CDirectPrintServer end"); + } + +void CDirectPrintServer::ConstructL() + { + LOG("CDirectPrintServer::ConstructL begin"); + StartL( KDirectPrintServerName ); + User::LeaveIfError( iFbs.Connect() ); + iEngine = CDirectPrintBody::NewL(); + LOG("CDirectPrintServer::ConstructL end"); + } + +void CDirectPrintServer::AddSession() + { + LOG("CDirectPrintServer::AddSession begin"); + ++iConnsCount; + LOG("CDirectPrintServer::AddSession end"); + } + +void CDirectPrintServer::RemoveSession() + { + --iConnsCount; + LOG1("CDirectPrintServer::RemoveSession iConnsCount: %d", iConnsCount); + if( iConnsCount == 0 ) + { + delete iEngine; + iEngine = NULL; + iFbs.Disconnect(); + CActiveScheduler::Stop(); + } + LOG("CDirectPrintServer::RemoveSession end"); + } + +TInt CDirectPrintServer::SessionCount() const + { + LOG("CDirectPrintServer::SessionCount begin"); + LOG1("CDirectPrintServer::SessionCount return: %d", iConnsCount); + return iConnsCount; + } + +TInt CDirectPrintServer::RunError( TInt aError ) + { + LOG1("CDirectPrintServer::RunError aError: %d", aError); + if( aError == KErrBadDescriptor ) + { + PanicClient( Message(), EBadDescriptor ); + } + else + { + Message().Complete( aError ); + } + ReStart(); + LOG("CDirectPrintServer::RunError end"); + return KErrNone; + } + + +CSession2* CDirectPrintServer::NewSessionL( const TVersion& aVersion, const RMessage2& ) const + { + LOG("CDirectPrintServer::NewSessionL begin"); + TBool supported = User::QueryVersionSupported( TVersion( KDirectPrintServerMajor, + KDirectPrintServerMinor, + KDirectPrintServerBuild ), + aVersion ); + if( !supported ) + { + User::Leave( KErrNotSupported ); + } + + LOG("CDirectPrintServer::NewSessionL end"); + return new (ELeave) CDirectPrintSession(); + } + +TInt CDirectPrintServer::ReserveEngine( const CSession2* aSession ) + { + LOG("CDirectPrintServer::ReserveEngine begin"); + TInt err( KErrInUse ); + if( iEngineHolder == aSession || !iEngineHolder ) + { + iEngineHolder = aSession; + err = KErrNone; + } + LOG1("CDirectPrintServer::ReserveEngine return: %d", err); + return err; + } + +TInt CDirectPrintServer::ReleaseEngine( const CSession2* aSession ) + { + LOG("CDirectPrintServer::ReleaseEngine begin"); + TInt err( KErrInUse ); + if( iEngineHolder == aSession || !iEngineHolder ) + { + iEngineHolder = NULL; + err = KErrNone; + } + LOG1("CDirectPrintServer::ReleaseEngine return: %d", err); + return err; + } + +CDirectPrintBody& CDirectPrintServer::Engine() const + { + LOG("CDirectPrintServer::Engine begin"); + LOG("CDirectPrintServer::Engine end"); + return *iEngine; + } + +// End of File