DirectPrint/DirectPrintServer/src/directprintserver.cpp
changeset 19 2275db202402
parent 11 613a5ff70823
--- /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