messagingfw/msgsrvnstore/server/src/OBSVREG.CPP
changeset 0 8e480a14352b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/msgsrvnstore/server/src/OBSVREG.CPP	Mon Jan 18 20:36:02 2010 +0200
@@ -0,0 +1,115 @@
+// Copyright (c) 1998-2009 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:
+// OBSVREG.CPP
+//
+
+#include "MSVRUIDS.H"
+#include "MTCLREG.H"
+#include "MTCLBASE.H"
+#include "MSVPANIC.H"
+
+#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS  
+#include "msvconsts.h"				
+#endif
+
+/** Constructor.
+
+@param aMsvSession Message server session
+@param aDllTypeUid MTM component type UID, e.g. KUidMtmClientComponent to handle client MTMs
+@param aTimeoutMicroSeconds32 Time to wait before unloading MTM DLLs 
+*/
+EXPORT_C CObserverRegistry::CObserverRegistry(CMsvSession& aMsvSession,TUid aDllTypeUid,TTimeIntervalMicroSeconds32 aTimeoutMicroSeconds32)
+	: CMtmDllRegistry(aMsvSession.FileSession(), aDllTypeUid, aTimeoutMicroSeconds32), iMsvSession(aMsvSession)
+	{
+	// initialise registration data
+	};
+
+
+/**
+Destructor.
+*/
+EXPORT_C CObserverRegistry::~CObserverRegistry()
+	{
+	if (iIsAdded)
+		iMsvSession.RemoveObserver(*this);
+	};
+
+
+/** Second-phase constructor.
+*/
+EXPORT_C void CObserverRegistry::ConstructL()
+	{
+	// announce our presence to the session
+	iMsvSession.AddObserverL(*this);
+	iIsAdded=ETrue;
+
+	// load up all the installed DLLs that we need
+	User::LeaveIfError(iMsvSession.iSession->FillRegisteredMtmDllArray(iMtmDllTypeUid,iRegisteredMtmDllArray,iTimeoutMicroSeconds32));
+	};
+
+
+/** Implements the session observer interface to update the registry information 
+when MTM groups are installed or uninstalled.
+
+@param aEvent Event type
+@param aArg1 Event type-specific argument value (unused)
+@param aArg2 Event type-specific argument value
+@param aArg3 Event type-specific argument value (unused)
+@see MMsvSessionObserver::HandleSessionEventL()
+*/
+EXPORT_C void CObserverRegistry::HandleSessionEventL(TMsvSessionEvent aEvent, TAny* /*aArg1*/, TAny* aArg2, TAny* /*aArg3*/)
+	{
+	switch (aEvent)
+		{
+		case EMsvMtmGroupInstalled:
+			{
+			TUid* mtmtypeuid=(TUid*) aArg2;
+			if (!IsPresent(*mtmtypeuid))
+				{
+				CMtmGroupData* mtmgroupdata=iMsvSession.iSession->GetMtmGroupDataL(*mtmtypeuid);
+
+				TUid mtmdlltypeuid[KMsvNumMtmDllTypes];  //  There must be an easier way to construct the array
+				mtmdlltypeuid[EMtsrServerComponentIndex]	=KUidMtmServerComponent;
+				mtmdlltypeuid[EMtsrClientComponentIndex]	=KUidMtmClientComponent;
+				mtmdlltypeuid[EMtsrUiComponentIndex]		=KUidMtmUiComponent;
+				mtmdlltypeuid[EMtsrUiDataComponentIndex]	=KUidMtmUiDataComponent;
+/*
+				mtmdlltypeuid[EMtsrDllTupe1Index]=KMsvDllType1Uid;
+				mtmdlltypeuid[EMtsrDllType2Index]=KMsvDllType2Uid;
+				mtmdlltypeuid[EMtsrDllType3Index]=KMsvDllType3Uid;
+				mtmdlltypeuid[EMtsrDllType4Index]=KMsvDllType4Uid;
+				mtmdlltypeuid[EMtsrDllType5Index]=KMsvDllType5Uid;
+				mtmdlltypeuid[EMtsrDllType6Index]=KMsvDllType6Uid;
+*/
+				TInt index=0;
+				for (; (index<KMsvNumMtmDllTypes) && (iMtmDllTypeUid!=mtmdlltypeuid[index]); index++)
+					{
+					}
+				if (!(index==KMsvNumMtmDllTypes))
+					User::LeaveIfError(AddRegisteredMtmDll(mtmgroupdata->MtmTypeUid(),mtmgroupdata->TechnologyTypeUid(),*mtmgroupdata->MtmDllInfoArray()[index],*iMsvSession.iSession));
+				delete mtmgroupdata;
+				}
+			break;
+			}
+		case EMsvMtmGroupDeInstalled:
+			{
+			TUid* mtmtypeuid=(TUid*) aArg2;
+			if (IsPresent(*mtmtypeuid))
+				RemoveRegisteredMtmDll(*mtmtypeuid);         
+			break;
+			}
+		default:
+			break;
+		}
+	};