webengine/widgetregistry/Server/inc/WidgetRegistryServer.h
changeset 0 dd21522fd290
child 36 0ed94ceaa377
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/webengine/widgetregistry/Server/inc/WidgetRegistryServer.h	Mon Mar 30 12:54:55 2009 +0300
@@ -0,0 +1,179 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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:  This file contains the header file of the
+*                 CWidgetRegistryServer class.
+*
+*                 This class implements the CWidgetRegistryServer class.
+*
+*/
+
+
+#ifndef WIDGETREGISTRYSERVER_H
+#define WIDGETREGISTRYSERVER_H
+
+// INCLUDES
+#include <WidgetRegistryConstants.h>
+
+// FORWARD DECLARATIONS
+
+// ----------------------------------------------------------------------------------------
+// Server's policy here
+// ----------------------------------------------------------------------------------------
+
+//Total number of ranges
+const TUint widgetRegistryCount = 3;
+
+//Definition of the ranges of IPC numbers
+const TInt widgetRegistryRanges[widgetRegistryCount] =
+        {
+        EOpCodeRegisterWidget, // 0 ; EOpCodeRegisterWidget,EOpCodeDeRegisterWidget
+        EOpCodeDeRegisterWidget + 1, // 2 20 ; EOpCodeGetLprojName
+        EOpCodeNotSupported
+        };
+
+//Policy to implement for each of the above ranges
+const TUint8 widgetRegistryElementsIndex[widgetRegistryCount] =
+        {
+        0,
+        1,
+        CPolicyServer::ENotSupported  //applies to 3rd range (out of range IPC)
+        };
+
+//Specific capability checks
+const CPolicyServer::TPolicyElement widgetRegistryElements[] =
+        {
+        {_INIT_SECURITY_POLICY_C1(ECapabilityWriteDeviceData), CPolicyServer::EFailClient},
+        {_INIT_SECURITY_POLICY_C1(ECapabilityReadDeviceData), CPolicyServer::EFailClient}
+        };
+
+//Package all the above together into a policy
+const CPolicyServer::TPolicy widgetRegistryPolicy =
+        {
+        CPolicyServer::EAlwaysPass, //Allows clients to connect
+        widgetRegistryCount,        //number of ranges
+        widgetRegistryRanges,       //ranges array
+        widgetRegistryElementsIndex,//elements<->ranges index
+        widgetRegistryElements,     //array of elements
+        };
+
+// FORWARD DECLARATIONS
+
+/**
+*
+*  This class defines shut down timer usage for the widget registry server
+*  @since 3.1
+*/
+class CShutdown : public CTimer
+    {
+
+public:
+    /**
+    * Constructor
+    */
+    inline CShutdown():CTimer( -1 )
+        {
+        CActiveScheduler::Add( this );
+        }
+
+    /**
+    * 2-phase constructor
+    */
+    inline void ConstructL()
+        {
+        CTimer::ConstructL();
+        }
+
+    /**
+    * Start timer
+    */
+    inline void Start()
+        {
+        After( KShutdownDelay );
+        }
+    ~CShutdown()
+        {
+        }
+
+private:
+    /*
+    * From CActive, see base class header.
+    */
+    void RunL();
+
+    };
+
+
+/**
+*
+*  This class defines the widget registry server
+*  @since 3.1
+*/
+class CWidgetRegistryServer : public CPolicyServer
+    {
+public:
+
+    /**
+    * Returns singleton of factory.
+    */
+    static CServer2* NewLC();
+
+    /**
+    * Initialize and run the server.
+    */
+    static void RunServerL();
+
+    /**
+    * Cancel the shutdown timer, the new session is connected
+    */
+    void AddSession();
+
+    /**
+    * Decrement the session counter and start the shutdown timer if the last client
+    * has disconnected
+    */
+    void RemoveSession();
+
+    /**
+    * Return session count
+    */
+    TInt SessionCount(){ return iSessionCount; }
+
+private:
+    /**
+    * Constructor
+    */
+    CWidgetRegistryServer();
+
+    /**
+    * Destructor.
+    */
+    ~CWidgetRegistryServer();
+    
+    /**
+    * 2-phase constructor
+    */
+    void ConstructL();
+
+    /**
+    * From CServer2
+    */
+    virtual CSession2* NewSessionL(
+        const TVersion& aVersion, const RMessage2& aMessage ) const;
+
+private: // Data members
+    TInt        iSessionCount;// number of open sessions
+    CShutdown   iShutDown;// shut down timer
+    };
+
+#endif