// EIKBAKSV.H
//
// Copyright (c) 1997-1999 Symbian Ltd.  All rights reserved.
//

#if !defined(__EIKBAKSV_H__)
#define __EIKBAKSV_H__

#if !defined(__E32BASE_H__)
#include <e32base.h>
#endif

#if !defined(__W32STD_H__)
#include <w32std.h>
#endif

#if !defined(__APGWGNAM_H__)
#include <apgwgnam.h>
#endif

//
// CEikServBackupServer
//

class CEikServBackupServer : public CServer
	{
public:
	static CEikServBackupServer* NewL(RWsSession& aWsSession);
	virtual CSession* NewSessionL(RThread aClient,const TVersion &aVersion) const;
	inline RWsSession& WsSession() { return iWsSession; }
private:
	CEikServBackupServer(TInt aPriority, RWsSession& aWsSession);
	RWsSession& iWsSession; 
	};

class CEikServProgramList : public CBase
	{
friend class CEikServBackupSession;

public:
	static CEikServProgramList *NewL(RWsSession &aWs);
	virtual ~CEikServProgramList();
	//
	TInt Next(TDes &anApp, TDes &aFile, TInt& aId);
private:
	//
	CEikServProgramList(RWsSession &aWs);
	void ConstructL();
	//
	TInt				iWinGroupId;
	TFileName			iApplication;
	TFileName			iFile;
	RWsSession			&iWsSession;
	//
	TUint				iHandle;
	//
	TDblQueLink		iLink;
	};
//
// CEikServBackupSession
//

class CEikServBackupSession : public CSession
	{
public:
	CEikServBackupSession(RThread& aClient);
	~CEikServBackupSession();

private:
	virtual void ServiceL(const RMessage &aMessage);

	void ShutdownApps();
	//
	void AppListOpen(const RMessage &aMessage);
	void AppListRead(const RMessage &aMessage);
	void AppListClose(const RMessage &aMessage);
	//
	void AppStop(const RMessage &aMessage);
	void AppIsRunning(const RMessage &aMessage);
	void DetailsFromApp(const RMessage &aMessage);
	//
	void DocStop(const RMessage &aMessage);
	void DocIsOpen(const RMessage &aMessage);
	//
	void StartDocument(const RMessage &aMessage);
	void StartApplication(const RMessage &aMessage);
	//
	void OwnerInfoL(const RMessage &aMessage);
	//
	TDblQue<CEikServProgramList> iAppListQ;	
	CEikServProgramList * FindHandle(TUint32 aH);
	//
	inline CEikServBackupServer* BackupServer() const {return(CEikServBackupServer*)Server();}
	};

#endif