commonuisupport/uikon/srvinc/EIKBAKSV.H
changeset 0 2f259fa3e83a
child 4 8ca85d2f0db7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/commonuisupport/uikon/srvinc/EIKBAKSV.H	Tue Feb 02 01:00:49 2010 +0200
@@ -0,0 +1,199 @@
+// Copyright (c) 1997-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:
+//
+
+/**
+ @file
+ @internalComponent
+*/
+
+#ifndef __EIKBAKSV_H__
+#define __EIKBAKSV_H__
+
+#include <e32base.h>
+#include <baksrv.h>
+#include <babackup.h>
+#include <badesca.h>
+#include <w32std.h>
+#include <apgcli.h>
+
+enum TEikBackupServPanic
+	{
+	EBadInternalState = 0,
+	};
+
+class MAppStarterObserver
+	{
+public:
+	virtual void HandleAppsStarted() = 0;
+	};
+
+class MAppShutterObserver
+	{
+public:
+	virtual void HandleAppsClosedL(TBool aAllAppsClosed) = 0;
+	};
+
+class CEikServAppShutter;
+class CEikServBackupServer;
+
+NONSHARABLE_CLASS(CEikServBackupSession) : public CBaServBackupSession, public MAppShutterObserver
+	{
+public:
+	static CEikServBackupSession* NewL();
+	~CEikServBackupSession();
+public: // from CBaServBackupSession
+	void HandleError(TInt aError);
+private: // from MAppShutterObserver
+	void HandleAppsClosedL(TBool aAllAppsClosed);
+private:
+	inline CEikServBackupSession() :CBaServBackupSession() {} 
+private: // from CBaServBackupSession
+	TCompletionType CloseAllFilesL(const RMessage2& aMessage);
+	void RestartAll();
+	void ServiceL(const RMessage2& aMessage);
+	void ServiceError(const RMessage2& aMessage,TInt aError);
+private:
+	static void CleanupCloseAllFiles(TAny* aPtr);
+	void DoRestartAll();
+	void PanicClientL(const RMessage2& aMessage,TEikBackupServPanic aCode);
+private:
+	CEikServAppShutter* iAppShutter;
+	};
+
+class CAppShutter;
+
+NONSHARABLE_CLASS(CAppWatcher) : public CActive
+	{
+public:
+	static CAppWatcher* NewL(TThreadId aThreadId,CAppShutter& aAppShutter,const CEikServBackupSession::TClosedFile& aClosedFile);
+	~CAppWatcher();
+	const CEikServBackupSession::TClosedFile& Info() const;
+private:
+	CAppWatcher(CAppShutter& aAppShutter,const CEikServBackupSession::TClosedFile& aClosedFile);
+	void ConstructL(TThreadId aThreadId);
+private: // from CActive
+	void DoCancel();
+	void RunL();
+	TInt RunError(TInt aError);
+private:
+	CAppShutter& iAppShutter;
+	CEikServBackupSession::TClosedFile iClosedFile;
+	RThread iThread;
+	};
+
+NONSHARABLE_CLASS(CAppShutter) : public CBase
+	{
+public:
+	static CAppShutter* StartL(MAppShutterObserver& aObserver,
+				   CArrayFix<CEikServBackupSession::TClosedFile>& aClosedFiles,
+				   CBaBackupServer& aBackupServer);
+
+	~CAppShutter();
+	void HandleAppClosedL(const CEikServBackupSession::TClosedFile& aClosedFile);
+private:
+	CAppShutter(MAppShutterObserver& aObserver,
+ 		    CArrayFix<CEikServBackupSession::TClosedFile>& aClosedFiles,
+		    CBaBackupServer& aBackupServer);
+
+	void ConstructL();
+	static TInt TimerCallBackL(TAny* aPtr);
+	void HandleTimerCallBackL();
+	void NextL();
+	TBool IsWgIdValid(TInt aWgId);
+	void CheckCompleteL();
+private:
+	NONSHARABLE_CLASS(CShutterTimer) : public CPeriodic
+		{
+	public:
+		static CShutterTimer* NewL(TInt aPriority);
+	protected: // from CActive
+		TInt RunError(TInt aError);
+	private:
+		CShutterTimer(TInt aPriority);
+		};
+private:
+	MAppShutterObserver& iObserver;
+	RWsSession iWsSession;
+	RArray<RWsSession::TWindowGroupChainInfo>* iWgIds;
+	CArrayFix<CEikServBackupSession::TClosedFile>& iClosedFiles;
+	CArrayPtr<CAppWatcher>* iAppWatchers;
+	CShutterTimer* iTimer;
+	TInt iNextWgIndex;
+	CBaBackupServer& iBackupServer;
+	TInt iCheckCount;
+	};
+
+NONSHARABLE_CLASS(CEikServAppShutter) : public CBase
+	{
+public:
+	CEikServAppShutter(const RMessage2& aMessage);
+	~CEikServAppShutter();
+	void ConstructL(MAppShutterObserver& aObserver,
+			CArrayFix<CEikServBackupSession::TClosedFile>& aClosedFiles,
+			CBaBackupServer* aBackupServer);
+
+	const RMessage2& Message() const;
+private:
+	CAppShutter* iShutter;
+	RMessage2 iMessage;
+	};
+
+class CAppStarter;
+
+NONSHARABLE_CLASS(CEikServBackupServer) : public CBaBackupServer, public MAppStarterObserver
+	{
+public:
+	IMPORT_C static CEikServBackupServer* NewL();
+public:
+	~CEikServBackupServer();
+private: // from CBaBackupServer
+	void ConstructL();
+	void CompleteClosingFiles(CArrayFix<CBaServBackupSession::TClosedFile>* aClosedFiles);
+	TBool IsOtherClientBusy(TUint32 aUniqueClientId) const;
+private: // from CServer
+	CSession2* NewSessionL(const TVersion &aVersion, const RMessage2& aMessage ) const;
+private: // from MAppStarterObserver
+	void HandleAppsStarted();
+private:
+	CEikServBackupServer(TInt aPriority);
+	inline TBool IsOtherClientBusy(TUint32 aUniqueClientId);
+	inline TBool IsClientBusy(TUint32 aUniqueClientId);
+private:
+	CAppStarter* iAppStarter;
+	};
+
+
+NONSHARABLE_CLASS(CAppStarter) : public CActive
+	{// Active object wraps the task of starting up apps in a thread
+public:
+	static CAppStarter* NewL(MAppStarterObserver& aObserver,CArrayFix<CEikServBackupSession::TClosedFile>* aClosedFiles);
+	~CAppStarter();
+private:
+	CAppStarter(MAppStarterObserver& aObserver, CArrayFix<CEikServBackupSession::TClosedFile>* aClosedFiles);
+	void ConstructL();
+
+	static TInt ThreadEntryPoint(TAny* aParams);
+	void StartAppsL();// Main thread function
+private: // from CActive
+	void DoCancel();
+	void RunL();
+private:
+	MAppStarterObserver& iObserver;
+	CArrayFix<CEikServBackupSession::TClosedFile>* iClosedFiles;// Object owned by CBaBackupServer. Resource ownership
+																// transferred to derived CEikServBackupServer
+	RThread iThread;
+	};
+
+#endif	// __EIKBAKSV_H__