ImagePrint/ImagePrintEngine/ImagePrintServer/src/server/cserveridleguard.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 17 Dec 2009 08:45:53 +0200
changeset 0 d11fb78c4374
permissions -rw-r--r--
Revision: 200949 Kit: 200951

/*
* 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