sysstatemgmt/systemstatemgr/ss/src/startandretry.cpp
changeset 0 4e1aa6a622a0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sysstatemgmt/systemstatemgr/ss/src/startandretry.cpp	Tue Feb 02 00:53:00 2010 +0200
@@ -0,0 +1,112 @@
+// Copyright (c) 2007-2009 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 "startandretry.h"
+#include <ssm/ssmstartupproperties.h>
+#include "rvobserver.h"
+
+void CStartAndRetry::Actuate()
+	{
+	TInt err = KErrNone;
+	const TSsmExecutionBehaviour executionBehaviour = iStartupProperties->ExecutionBehaviour();
+	if ( (ESsmWaitForSignal == executionBehaviour) || (ESsmDeferredWaitForSignal == executionBehaviour) )
+		{
+		//issue the request to start the application with check whether we already running or timeout
+		TRAP( err, DoWaitForStartL() );
+		}
+	else
+		{
+		err = KErrArgument; 
+		}
+	if( KErrNone != err )
+		{
+		// Report the completion code and precipitate the destruction of this object.
+		iStartSafeNotify.RendezvousComplete( err, iCallerIndex );
+		}
+	}
+
+/** 
+ From MRvObserverNotification
+*/
+void CStartAndRetry::NotifyCompletion( TInt aCompletion )
+	{
+	// Report the completion code and precipitate the destruction of this object.
+	iStartSafeNotify.RendezvousComplete( aCompletion, iCallerIndex );
+	}
+
+/** 
+ From MRvObserverNotification
+*/
+void CStartAndRetry::NotifyCancellation( TInt aCompletion )
+	{
+	// Report the cacellation code.
+	iStartSafeNotify.CancellationComplete( aCompletion, iCallerIndex );
+	}
+
+/**
+ The observer was constructed in ConstructL.
+ Total number of attempts is 1 + NoOfRetries().
+ 
+ The check for NULL is future-proofing precaution..
+*/
+void CStartAndRetry::DoWaitForStartL()
+	{
+	User::LeaveIfNull( iRvObserver );
+	iRvObserver->RvAndObserveL( iStartupProperties );
+	}
+
+CStartAndRetry::~CStartAndRetry()
+	{
+	delete iRvObserver;
+	delete iStartupProperties;
+	}
+
+CStartAndRetry* CStartAndRetry::NewL( MStartAndRetryNotifications& aStartSafeNotify, const CSsmStartupProperties& aStartupProperties, RProcess& aProcess, TInt aCallerIndex, CApaStarter* aApaStarter )
+	{
+	CStartAndRetry* self = NewLC( aStartSafeNotify, aStartupProperties, aProcess, aCallerIndex, aApaStarter );
+	CleanupStack::Pop();	
+	
+	return self;
+	}
+
+CStartAndRetry* CStartAndRetry::NewLC( MStartAndRetryNotifications& aStartSafeNotify, const CSsmStartupProperties& aStartupProperties, RProcess& aProcess, TInt aCallerIndex, CApaStarter* aApaStarter )
+	{
+	CStartAndRetry* self = new(ELeave) CStartAndRetry( aStartSafeNotify, aProcess, aCallerIndex, aApaStarter );
+	CleanupStack::PushL( self );
+	self->ConstructL( aStartupProperties );
+	
+	return self;
+	}
+
+CStartAndRetry::CStartAndRetry( MStartAndRetryNotifications& aStartSafeNotify, RProcess& aProcess, TInt aCallerIndex, CApaStarter* aApaStarter )
+: iCallerIndex( aCallerIndex ),
+  iProcess( aProcess ),
+  iStartSafeNotify( aStartSafeNotify ),
+  iApaStarter( aApaStarter )
+	{
+	}
+
+void CStartAndRetry::ConstructL( const CSsmStartupProperties& aStartupProperties )
+	{	
+	iStartupProperties = CSsmStartupProperties::NewL( aStartupProperties );
+	
+	iRvObserver = CRvObserver::NewL( iProcess, *this, iApaStarter );
+	}
+
+
+
+
+
+