devsoundextensions/ciextnfactoryplugins/ciplatformmsghndlrplugin/src/ciplatformmsghndlrplugin.cpp
changeset 0 b8ed18f6c07b
child 5 b220a9341636
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/devsoundextensions/ciextnfactoryplugins/ciplatformmsghndlrplugin/src/ciplatformmsghndlrplugin.cpp	Thu Oct 07 22:34:12 2010 +0100
@@ -0,0 +1,204 @@
+/*
+* Copyright (c) 2002-2008 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:   Class definition of plugin implementing message handler
+*                interface.
+*
+*/
+
+
+
+// Include files
+#include "ciplatformmsghndlrplugin.h"
+#include "ciplatformmsghndlrplugin.hrh"
+#include "citraces.h"
+#include <ecom.h>
+#include <CustomInterfaceBuilder.h>
+#include <CustomInterfaceCustomCommandParser.h>
+
+#define RET_ERR_IF_ERR(s) if(s!=KErrNone) return s
+
+// ---------------------------------------------------------------------------
+// Constructs and returns an application object.
+// ---------------------------------------------------------------------------
+//
+MCIMsgHndlrIntfc* CCIPlatformMsgHndlrPlugin::NewL()
+    {
+    DEB_TRACE0(_L("*CI* CCIPlatformMsgHndlrPlugin::NewL"));
+    CCIPlatformMsgHndlrPlugin* self = new (ELeave) CCIPlatformMsgHndlrPlugin;
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    MCIMsgHndlrIntfc* ptr = static_cast<MCIMsgHndlrIntfc*>(self);
+    return ptr;
+    }
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CCIPlatformMsgHndlrPlugin::~CCIPlatformMsgHndlrPlugin()
+    {
+    // No Impl
+    }
+
+// ---------------------------------------------------------------------------
+// Called by framework when plugin is constructed
+// ---------------------------------------------------------------------------
+//
+TInt CCIPlatformMsgHndlrPlugin::Initialize( MCustomInterface& aCustomInterface, TUid aDestructorKey )
+    {
+    TInt status(KErrNone);
+    iMCustomInterface = &aCustomInterface;
+    iDestructorKey = aDestructorKey;
+    iCIFWObjectsInitialized = EFalse;
+    return status;
+    }
+
+// ---------------------------------------------------------------------------
+// Called by framework when it needs to know plugin implementation uid
+// ---------------------------------------------------------------------------
+//
+TUid CCIPlatformMsgHndlrPlugin::ImplementationUid()
+    {
+    TUid implId = {KUidCCIPlatformMsgHndlrPlugin};
+    return implId;
+    }
+
+// ---------------------------------------------------------------------------
+// Called by framework forwarding request to handle aMessage
+// ---------------------------------------------------------------------------
+//
+TBool CCIPlatformMsgHndlrPlugin::HandleMessage( const RMmfIpcMessage& aMessage )
+    {
+    DEB_TRACE0(_L("*CI* CCIPlatformMsgHndlrPlugin::HandleMessage"));
+
+    TBool handled(EFalse);
+    // Initialize Custom Interface Framework Objects if not done already
+    if (!iCIFWObjectsInitialized)
+        {
+        TRAPD( status, InitializeCIFWObjectsL());
+        if ( status != KErrNone )
+            {
+            aMessage.Complete(status);
+            handled = ETrue;
+            }
+        }
+
+    // Get the destination info from the client into TMMFMessage.
+    TMMFMessage message(aMessage);
+    TRAPD(status, message.FetchDestinationL());
+
+    // Check if Custom Command Parser manager can handle the message...
+    if (!handled)
+        {
+        handled = iCustomCommandParserManager->HandleRequest(message);
+        }
+
+    // Check if the aMessage is for one of the MMF Objects
+    if (!handled)
+        {
+        CMMFObject* object = NULL;
+        // Try to find MMFObject that handles this request
+        TInt status = iMMFObjectContainer->FindMMFObject(message.Destination(),
+                                                     object);
+
+        // If found, give message to the MMFObject
+        if ( KErrNone == status )
+            {
+            object->HandleRequest(message);
+            handled = ETrue;
+            }
+        }
+
+    return handled;
+    }
+
+// ---------------------------------------------------------------------------
+// Called by framework when plugin is to be deleted
+// ---------------------------------------------------------------------------
+//
+void CCIPlatformMsgHndlrPlugin::Close()
+    {
+    DEB_TRACE0(_L("*CI* CCIPlatformMsgHndlrPlugin::Close"));
+
+    iMCustomInterface = NULL;
+    delete iCustomCommandParserManager;
+
+    iCustomCommandParserManager =  NULL;
+    delete iMMFObjectContainer;
+    iMMFObjectContainer = NULL;
+
+    iCIFWObjectsInitialized = EFalse;
+
+    REComSession::DestroyedImplementation(iDestructorKey);
+
+    delete this;
+    }
+
+// ---------------------------------------------------------------------------
+// Called by framework to get handle to custom interface builder
+// ---------------------------------------------------------------------------
+//
+const TMMFMessageDestination& CCIPlatformMsgHndlrPlugin::GetCustomInterfaceBuilderL()
+    {
+    // return the handle
+    return iCustomInterfaceBuilder->Handle();
+    }
+
+// ---------------------------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------------------------
+//
+CCIPlatformMsgHndlrPlugin::CCIPlatformMsgHndlrPlugin()
+:iMCustomInterface(NULL),
+iCIFWObjectsInitialized(EFalse),
+iMMFObjectContainer(NULL),
+iCustomCommandParserManager(NULL),
+iCustomInterfaceBuilder(NULL)
+    {
+    // No Impl
+    }
+
+// ---------------------------------------------------------------------------
+// Second phase constructor
+// ---------------------------------------------------------------------------
+//
+void CCIPlatformMsgHndlrPlugin::ConstructL()
+    {
+    // No Impl
+    }
+
+// ---------------------------------------------------------------------------
+// Initializes objects required for Custom Interface Framework.
+// ---------------------------------------------------------------------------
+//
+void CCIPlatformMsgHndlrPlugin::InitializeCIFWObjectsL()
+    {
+    DEB_TRACE0(_L("*CI* CCIPlatformMsgHndlrPlugin::InitializeCIFWObjectsL"));
+
+    iMMFObjectContainer = new(ELeave) CMMFObjectContainer;
+
+    iCustomCommandParserManager = CMMFCustomCommandParserManager::NewL();
+
+    CCustomInterfaceCustomCommandParser* ciccParser = CCustomInterfaceCustomCommandParser::NewL(*this);
+    CleanupStack::PushL( ciccParser );
+
+    iCustomCommandParserManager->AddCustomCommandParserL(*ciccParser);
+    CleanupStack::Pop( ciccParser );
+
+    iCustomInterfaceBuilder = CCustomInterfaceBuilder::NewL( *iMMFObjectContainer, *iMCustomInterface);
+    iMMFObjectContainer->AddMMFObject(*iCustomInterfaceBuilder);
+
+    iCIFWObjectsInitialized = ETrue;
+    }