uiacceltk/hitchcock/ServerCore/Inc/alfstreamerserver.h
changeset 0 15bf7259bb7c
child 8 10534483575f
child 14 83d2d132aa58
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/uiacceltk/hitchcock/ServerCore/Inc/alfstreamerserver.h	Tue Feb 02 07:56:43 2010 +0200
@@ -0,0 +1,149 @@
+/*
+* 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 "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:   Server declaration, internal for Nokia
+*
+*/
+
+
+
+#ifndef __ALF_STREAMER_SERVER_H__
+#define __ALF_STREAMER_SERVER_H__
+
+#include "graphics/surface.h"
+#include "themerepositorylistener.h"
+
+class CAlfStreamerServerSession;
+class CAlfStreamerBridge;
+class CAlfWindowManager;
+class CAlfHierarchyModel;
+class TSurfaceId;
+
+NONSHARABLE_CLASS(CAlfStreamerServer): public CServer2
+    {
+public:
+    static TInt LaunchServer(TThreadId& aThreadId, CAlfStreamerBridge* aBridge );
+    static void NewLC(CAlfStreamerBridge* aBridge);
+	~CAlfStreamerServer();
+    void HandleClientExit(const CSession2* aClient);
+    CAlfWindowManager* WindowMgr() 
+        {
+        return iWindowMgr;
+        }
+    CAlfStreamerBridge* Bridge()
+        {
+        return iBridge;
+        }
+
+    CAlfHierarchyModel* WindowTree()
+        {
+        return iWindowHierarcy;
+        }
+
+    /** composition control **/
+    void AppendCompositionSessionL(CAlfStreamerServerSession* aSession, TBool aHost = EFalse );
+    void RemoveCompositionSession(CAlfStreamerServerSession* aSession);
+    void HandleCompositionRequestL(CAlfStreamerServerSession* aSession, TInt aOp, const RMessage2& aMessage);
+    void QueueRequestForSessionL(CAlfStreamerServerSession* aSession, const TPtrC8& aPtr, TInt aOp);
+    void QueueRequestAllSessionsL(const TPtrC8& aPtr, TInt aOp, TBool aAlsoWserv = EFalse);   
+    void HandleCompositionEventL(CAlfStreamerServerSession* aSession, TInt aOp, const RMessage2& aMessage);
+
+    TInt CreatePermissionToken(const RMessage2& aMessage, TInt aTarget, CAlfStreamerServerSession* aSession);
+    void ValidateToken(CAlfStreamerServerSession* aSession, const RMessage2& aMessage);
+
+    void FreeCompositionSessionExtents(CAlfStreamerServerSession* aSession);
+    
+private:
+    void ConstructL();
+
+    CAlfStreamerServer( CAlfStreamerBridge* aBridge):
+        CServer2(CActive::EPriorityStandard), iBridge(aBridge){}
+	
+    CSession2* NewSessionL(const TVersion& aVersion,const RMessage2& aMessage) const;
+
+    CAlfStreamerServerSession* WservSession(TInt aScreenNumber);
+    
+private:
+    CAlfStreamerBridge* iBridge; // not owned
+    mutable TUint iSessions;
+    CAlfWindowManager* iWindowMgr;
+    CAlfHierarchyModel* iWindowHierarcy;
+    CThemeRepositoryListener* iThemesListener;
+    
+    RPointerArray<CAlfStreamerServerSession> iCompositionSessions;
+    RPointerArray<CAlfStreamerServerSession> iCompositionHostSessions;
+    RPointerArray<CAlfStreamerServerSession> iWindowServerSessions;
+    
+    class CCompositionToken : public CBase
+    {   
+    public:
+        
+        /*
+         * CCompositionToken is used by CAlfCompositionSource and CAlfCompositionHost
+         * for maintaining layer sharing permissions.
+         */
+        CCompositionToken( TInt aKey, TInt aSecretKey, TInt aFlags, TInt aTarget, TInt aScreenNumber, TBool aCombinedTarget = EFalse) : 
+            iKey(aKey),
+            iSecretKey(aSecretKey), 
+            iFlags(aFlags),
+            iTarget(aTarget),
+            iScreenNumber(aScreenNumber),
+            iCombinedTarget(aCombinedTarget){};
+        
+            TInt iKey;
+            TInt iSecretKey;
+            TInt iFlags;
+            TInt iTarget;
+            TInt iScreenNumber;
+            TBool iCombinedTarget;
+    };
+    
+    RArray<CCompositionToken> iCompositionTokens;
+    CAsyncCallBack * iRendezvous;
+    };
+
+NONSHARABLE_CLASS(CAlfStreamerServerSession): public CSession2
+    {
+public:
+    CAlfStreamerServerSession();
+    ~CAlfStreamerServerSession();
+    void ServiceL(const RMessage2& aMessage);
+    void HandleCompositionOpL(TInt aOp, const RMessage2& aMessage, CAlfStreamerServer* aServer);
+    RMessagePtr2& MessagePtr()
+        {
+        return iMessagePtr;
+        }
+    TBool CompletedFromQueue(const RMessage2& aMessage);
+    void QueueL(const TPtrC8& aPtr, TInt aCmd);    
+    
+    void SetScreenNumber(TInt aScreennumber);
+    TInt ScreenNumber() const;
+    TSurfaceId& ExtentSurfaceId();
+    
+private:
+    RArray<TInt> iLoadedPlugins;
+    RArray<TInt> iCmds;
+    RPointerArray<HBufC8> iQueue;
+    TBool iIsListeningCompositionEvents;
+    RMessagePtr2 iMessagePtr;
+    
+    // Number of the screen where composition client has its window.
+    // KErrNotFound if composition client does not have a window at all.
+    TInt iScreenNumber;
+    
+    // Surface id of the composition client. If composition client has set extent to some other screen than where its actual window is. 
+    // This is used to identify layers created for this composition client 
+    TSurfaceId iExtentSurfaceId;  
+    };
+
+#endif