ImagePrint/ImagePrintEngine/ImagePrintServer/src/server/cserveridleguard.cpp
changeset 0 d11fb78c4374
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ImagePrint/ImagePrintEngine/ImagePrintServer/src/server/cserveridleguard.cpp	Thu Dec 17 08:45:53 2009 +0200
@@ -0,0 +1,147 @@
+/*
+* 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 "cserveridleguard.h"
+#include "cimageprintbody.h"
+#include "tidleevent.h"
+#include "clog.h"
+#include "tmessagewrp2.h"
+
+CServerIdleGuard* CServerIdleGuard::NewL( CImagePrintBody& aEngine )
+    {	
+	CServerIdleGuard* self = new ( ELeave ) CServerIdleGuard( aEngine );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+	CleanupStack::Pop();    // self
+    return self;
+    }
+
+CServerIdleGuard::CServerIdleGuard( CImagePrintBody& aEngine ) : iEngine( aEngine ),
+														iRequestActive( EFalse )
+    {
+    }
+
+CServerIdleGuard::~CServerIdleGuard()
+    { 
+    LOG("CServerIdleGuard::~CServerIdleGuard begin");
+    iBuffer.Close();
+    LOG("CServerIdleGuard::~CServerIdleGuard end");  
+    }
+
+void CServerIdleGuard::ConstructL()
+    {
+    }
+
+void CServerIdleGuard::StatusEvent( const TEvent &aEvent, TInt aError, TInt aMsgCode )
+	{
+	LOG("CServerIdleGuard::StatusEvent begin");		
+	LOG1("CServerIdleGuard::StatusEvent aError: %d", aError);
+	LOG1("CServerIdleGuard::StatusEvent aMsgCode: %d", aMsgCode);	
+	LOG1("CServerIdleGuard::StatusEvent aEvent.iProtocol: %d", aEvent.iProtocol);
+	LOG1("CServerIdleGuard::StatusEvent aEvent.iSeverity: %d", aEvent.iSeverity);
+	LOG1("CServerIdleGuard::StatusEvent aEvent.iEventType: %d", aEvent.iEventType);				
+	TRAPD( err, DoStatusEventL( aEvent, aError, aMsgCode ) );					
+	LOG1("CServerIdleGuard::StatusEvent DoStatusEventL's TRAP err: %d", err);					
+	Process( err );
+	LOG("CServerIdleGuard::StatusEvent end");
+	}
+		
+void CServerIdleGuard::Guard( TMessageWrp2& aMessage )
+	{
+	LOG("CServerIdleGuard::Guard begin");
+	if( iMessage ) iMessage->SetDisposable( ETrue );			
+	iMessage = &aMessage;			
+	iRequestActive = ETrue;
+	iEngine.RegisterIdleObserver( this );
+	if( iBuffer.Count() )
+		{
+		LOG("CServerIdleGuard::Guard before Process");
+		Process();
+		LOG("CServerIdleGuard::Guard after Process");	
+		}
+	LOG("CServerIdleGuard::Guard end");	
+	}
+	
+void CServerIdleGuard::Stop()
+	{
+	LOG("CServerIdleGuard::Stop begin");		
+	if( iRequestActive )
+		{
+		LOG("CServerIdleGuard::Stop cancelling...");
+		iMessage->Complete( KErrCancel );
+		iRequestActive = EFalse;
+		}
+	iEngine.RegisterIdleObserver( NULL );		
+	LOG("CServerIdleGuard::Stop end");
+	}	
+		
+void CServerIdleGuard::DoStatusEventL( const TEvent &aEvent, TInt aError, TInt aMsgCode )
+	{
+	LOG("CServerIdleGuard::DoStatusEventL begin");
+	TIdleGuardData data;
+	data.iEvent = aEvent;
+	data.iError = aError;
+	data.iMsgCode = aMsgCode;
+	User::LeaveIfError( iBuffer.Append( data ) );
+	LOG("CServerIdleGuard::DoStatusEventL end");				
+	}
+		
+void CServerIdleGuard::Process( TInt aErr )
+	{
+	LOG("CServerIdleGuard::Process begin");
+	if( aErr )
+		{
+		LOG1("CServerIdleGuard::Process aErr: %d", aErr);
+		iMessage->Complete( aErr );
+		iRequestActive = EFalse;
+		}
+	else
+		{
+		LOG("CServerIdleGuard::Process calling DoProcessL");
+		TRAPD( err, DoProcessL() );
+		LOG1("CServerIdleGuard::Process DoProcessL's TRAP err: %d", err);
+		if( err )
+			{
+			iMessage->Complete( err );
+			iRequestActive = EFalse;
+			}	
+		}
+	LOG("CServerIdleGuard::Process end");	
+	}
+
+void CServerIdleGuard::DoProcessL()
+	{
+	LOG("CServerIdleGuard::DoProcessL begin");
+	if( iBuffer.Count() && iRequestActive )
+		{
+		LOG("CServerIdleGuard::DoProcessL step 1");																
+		TPtr8 ptr(reinterpret_cast<TUint8*>(&(iBuffer[0])), sizeof(iBuffer[0]), sizeof(iBuffer[0]));
+		LOG("CServerIdleGuard::DoProcessL step 2");
+		iMessage->WriteL( 0, ptr );
+		LOG("CServerIdleGuard::DoProcessL step 3");				
+		iMessage->Complete( KErrNone );
+		LOG("CServerIdleGuard::DoProcessL step 4");
+		iRequestActive = EFalse;
+		LOG("CServerIdleGuard::DoProcessL step 5");
+		iBuffer.Remove( 0 );
+		LOG("CServerIdleGuard::DoProcessL step 6");
+		}
+	LOG("CServerIdleGuard::DoProcessL end");	
+	}
+
+//  End of File