--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/uiacceltk/hitchcock/ServerCore/Src/alfsrvsubsessionbase.cpp Tue Feb 02 07:56:43 2010 +0200
@@ -0,0 +1,242 @@
+/*
+* 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: Sub session base.
+*
+*/
+
+
+
+#include "alf/alfappserver.h"
+#include "alf/alfappsrvsessionbase.h"
+#include "alfsrvsubsessionbase.h"
+#include "alflogger.h"
+
+NONSHARABLE_CLASS(CAlfSrvSubSessionBase::TPrivateData)
+ {
+ public:
+ MAlfExtension* iObject; // owned, use Release() to destroy
+ };
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------------------------
+//
+CAlfSrvSubSessionBase::CAlfSrvSubSessionBase( CAlfAppSrvSessionBase& aSession )
+ : iSession( aSession )
+ {
+ }
+
+CAlfSrvSubSessionBase* CAlfSrvSubSessionBase::NewLC( const RMessage2& aMessage,
+ TInt aImplementationUid,
+ TInt aImplementationId,
+ CAlfAppSrvSessionBase& aSession)
+ {
+ CAlfSrvSubSessionBase* me = new (ELeave) CAlfSrvSubSessionBase(aSession);
+ CleanupClosePushL(*me);
+ me->ConstructL(aMessage, aImplementationUid, aImplementationId);
+ return me;
+ }
+
+void CAlfSrvSubSessionBase::ConstructL(const RMessage2& aMessage,
+ TInt aImplementationUid,
+ TInt aImplementationId )
+ {
+ ConstructL();
+
+ // leaves if no implementation found
+ iData->iObject = iSession.AlfServer()->CreateExtensionL(
+ aImplementationUid, aImplementationId,aMessage);
+
+ iFactoryUid = aImplementationUid;
+ }
+
+
+// ---------------------------------------------------------------------------
+// 2nd phase constructor
+// ---------------------------------------------------------------------------
+//
+void CAlfSrvSubSessionBase::ConstructL()
+ {
+ iData = new (ELeave) TPrivateData;
+
+ iData->iObject = 0;
+ }
+
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CAlfSrvSubSessionBase::~CAlfSrvSubSessionBase()
+ {
+ if (iData && iData->iObject)
+ {
+ // todo: notify server about implementation removal
+ iData->iObject->Release();
+ }
+
+ delete iData;
+ }
+
+// ---------------------------------------------------------------------------
+// Process message
+// ---------------------------------------------------------------------------
+//
+void CAlfSrvSubSessionBase::ProcessMessageL(const RMessage2& aMessage)
+ {
+ // Call the virtual function.
+ DoProcessMessageL( aMessage );
+ }
+
+// ---------------------------------------------------------------------------
+// Processes the message.
+// ---------------------------------------------------------------------------
+//
+void CAlfSrvSubSessionBase::DoProcessMessageL(const RMessage2& aMessage)
+ {
+ if (iData && iData->iObject)
+ {
+ // session owns the buffers and everything related to msg handling
+ CAlfClientMessage* msg = iSession.CreateNewMessageHolderL(aMessage);
+
+ TRAPD(err, iData->iObject->HandleCmdL(msg->iDecodedOp,
+ *msg->iInBuf, msg->ReplyBufAsTDes8()));
+
+ iSession.CompleteCmd(0, err);
+ return;
+ }
+
+ User::Leave(KErrNotSupported);
+ }
+
+// ---------------------------------------------------------------------------
+// Returns the session
+// ---------------------------------------------------------------------------
+//
+CAlfAppSrvSessionBase& CAlfSrvSubSessionBase::Session()
+ {
+ return iSession;
+ }
+
+
+MHuiVisualOwner* CAlfSrvSubSessionBase::AsVisualOwner()
+ {
+ if (iData && iData->iObject)
+ {
+ return static_cast<MHuiVisualOwner*>(iData->iObject->GetInterface(EHuiInterfaceVisualOwner));
+ }
+
+ return 0;
+ }
+
+CHuiControl* CAlfSrvSubSessionBase::AsHuiControl()
+ {
+ if (iData && iData->iObject)
+ {
+ return static_cast<CHuiControl*>(iData->iObject->GetInterface(EHuiObjectTypeControl));
+ }
+
+ return 0;
+ }
+
+CHuiVisual* CAlfSrvSubSessionBase::AsHuiVisual()
+ {
+ if (iData && iData->iObject)
+ {
+ return static_cast<CHuiVisual*>(iData->iObject->GetInterface(EHuiObjectTypeVisual));
+ }
+
+ return 0;
+ }
+
+CHuiLayout* CAlfSrvSubSessionBase::AsHuiLayout()
+ {
+ if (iData && iData->iObject)
+ {
+ return static_cast<CHuiLayout*>(iData->iObject->GetInterface(EHuiObjectTypeLayout));
+ }
+
+ return 0;
+ }
+
+CHuiBrush* CAlfSrvSubSessionBase::AsHuiBrush()
+ {
+ if (iData && iData->iObject)
+ {
+ return static_cast<CHuiBrush*>(iData->iObject->GetInterface(EHuiObjectTypeBrush));
+ }
+
+ return 0;
+ }
+
+MHuiMappingFunction* CAlfSrvSubSessionBase::AsMappingFunction()
+ {
+ if (iData && iData->iObject)
+ {
+ return static_cast<MHuiMappingFunction*>(iData->iObject->GetInterface(EHuiInterfaceMappingFunction));
+ }
+
+ return 0;
+ }
+
+CHuiControlGroup* CAlfSrvSubSessionBase::AsHuiControlCroup()
+ {
+ if (iData && iData->iObject)
+ {
+ return static_cast<CHuiControlGroup*>(iData->iObject->GetInterface(EHuiObjectTypeControlGroup));
+ }
+
+ return 0;
+ }
+
+CHuiDisplay* CAlfSrvSubSessionBase::AsHuiDisplay()
+ {
+ if (iData && iData->iObject)
+ {
+ return static_cast<CHuiDisplay*>(iData->iObject->GetInterface(EHuiObjectTypeDisplay));
+ }
+
+ return 0;
+ }
+
+CAlfBrushHandler* CAlfSrvSubSessionBase::AsBrushHandler()
+ {
+ if (iData && iData->iObject)
+ {
+ return static_cast<CAlfBrushHandler*>(iData->iObject->GetInterface(EAlfBrushHandler));
+ }
+
+ return 0;
+ }
+
+MAlfExtension* CAlfSrvSubSessionBase::AsCommandHandler()
+ {
+ if (iData)
+ {
+ return iData->iObject;
+ }
+
+ return 0;
+ }
+
+// Todo: Currently we don't support trulu asynch operations as
+// MAlfExtension does not have interfaces to utilize for this purpose
+//
+// It should be evaluated whether there are real use cases for asynchronous command handling
+void CAlfSrvSubSessionBase::CancelAsynchRequests()
+ {
+ }
+