layouts/cdl/CdlServer/src/CdlServer.h
changeset 0 05e9090e2422
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/layouts/cdl/CdlServer/src/CdlServer.h	Thu Dec 17 09:14:12 2009 +0200
@@ -0,0 +1,156 @@
+/*
+* Copyright (c) 2003 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:
+*
+*/
+
+
+#ifndef CDLSERVER_H
+#define CDLSERVER_H
+
+// CDL server classes
+
+#include <e32base.h>
+#include "CdlClientServer.h"
+#include "CdlClientServerStd.h"
+#include "CdlRefs.h"
+#include "CdlDllWatcher.h"
+
+class TDriveUnit;
+
+enum TCdlPanic
+	{
+	// client panics
+	EPanicBadDescriptor,
+	EPanicIllegalFunction,
+	EPanicNotifyActive,
+	EPanicNoCustomisationRequested,
+	EPanicBufRequestedWithoutSetup,
+	EPanicParamOutOfRange,
+
+	// server panics
+	EServerPanicBase = 100,
+	EPanicTDllListOpEqNullCurrent,
+	EPanicTDllListOpLtNullCurrent,
+	EPanicTDllListCurrentNullCurrent,
+	EPanicTDllListNextNullCurrent,
+	EPanicTDllListNextNullDirs,
+	};
+
+void PanicClient(const RMessagePtr2& aMessage,TCdlPanic TCdlPanic);
+void Panic(TCdlPanic TCdlPanic);
+
+
+/**
+* Timer used to shut down the server after 2 seconds with no clients.
+*/
+class CShutdown : public CTimer
+	{
+	enum {KCdlShutdownDelay=2000000};	// 2 seconds
+public:
+	CShutdown();
+	void ConstructL();
+	void Start();
+private:
+	void RunL();
+	};
+
+
+/**
+* The CDL server.
+* This maintains a watch on the available CDL DLLs. It also maintains the total global
+* customisation state.
+*/
+class CCdlServer : public CServer2, MCdlDllsObserver
+	{
+public:
+	static CServer2* NewLC();
+	~CCdlServer();
+	void AddSession();
+	void DropSession();
+	CCdlRefs* GetStateLC(const CCdlUids& aUids) const;
+	void SetStateL(CCdlRefs* aState);
+	const CCdlRefs& AllRefs() const;
+	inline CCdlRefCollection* FileContentsLC(const TDesC& aFileName) { return iDllWatcher->FileContentsLC(aFileName); }
+	TInt IsPluginInRom(const TDesC& aFileName, TBool& aIsInRom);
+	TInt PluginDrive(const TDesC& aFileName, TDriveUnit& aDrive);
+
+private:
+	CCdlServer();
+	void ConstructL();
+	CSession2* NewSessionL(const TVersion& aVersion,const RMessage2& aMessage) const;
+	TInt RunError(TInt aError);
+
+private: // from MCdlDllsObserver
+	void McdoPrepareForChangesL();
+	void McdoFileAddedL(const TDesC& aFile);
+	void McdoFileRemovedL(const TDesC& aFile);
+	void McdoChangesCompleteL();
+
+private:
+	TInt iSessionCount;
+	// All the following are owned
+	CShutdown iShutdown;
+	CCdlEngineRef* iEngRef;
+	CCdlRefs* iState;
+	RFs iFs;
+	CCdlDllsWatcherBase* iDllWatcher;
+	CCdlRefs* iAllRefs;
+	};
+
+
+/**
+* The CDL server's client session.
+* This maintains a list of the UIDs that the client is interested in.
+* Changes in available customisations and in the relevant global customisation state
+* are sent to the client.
+*/
+class CCdlSession : public CSession2
+	{
+public:
+	CCdlSession();
+	void CreateL();
+	void HandleCustChangeL(const CCdlUids& aUids);
+	void HandleRefsChangeL();
+private:
+	~CCdlSession();
+	CCdlServer& Server();
+	void ServiceL(const RMessage2& aMessage);
+	void RequestGetCustL(const RMessage2& aMessage);
+	void GetCustL(const RMessage2& aMessage);
+	void SetUidsToNotifyL(const RMessage2& aMessage);
+	void NotifyChangeL(const RMessage2& aMessage);
+	void CancelNotifyChangeL(const RMessage2& aMessage);
+	void SetCustL(const RMessage2& aMessage);
+	void GetRefsSizeL(const RMessage2& aMessage);
+	void GetAllRefsSizeL(const RMessage2& aMessage);
+	void GetNamesSizeL(const RMessage2& aMessage);
+	void GetTempBufL(const RMessage2& aMessage);
+	void IsPluginInRomL(const RMessage2& aMessage);
+	void PluginDriveL(const RMessage2& aMessage);
+	TBool NotifyPending() const;
+	void NotifyCustChangeL();
+	void WriteAndComplete(const RMessagePtr2& aMessage, TInt aParam, const TDesC8& aDes, TInt aCode = KErrNone);
+	TInt ValidIntL(TInt aVal, TInt aMin, TInt aMax) const;
+private:
+	RMessagePtr2 iNotify;
+	HBufC8* iSendingBuf;		//owned
+	CCdlRefs* iSendingState;	//owned
+	CCdlUids iUids;
+	TBool iQueuedCustChange;	// is there a global customisation change waiting to be sent to the client?
+	TBool iQueuedRefsChange;	// is there a refs list change waiting to be sent to the client?
+	HBufC8* iTempBuf;			//owned
+	};
+
+#endif