diff -r 000000000000 -r 8e480a14352b messagingfw/msgsrvnstore/server/src/OBSVREG.CPP --- /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 (; (indexMtmTypeUid(),mtmgroupdata->TechnologyTypeUid(),*mtmgroupdata->MtmDllInfoArray()[index],*iMsvSession.iSession)); + delete mtmgroupdata; + } + break; + } + case EMsvMtmGroupDeInstalled: + { + TUid* mtmtypeuid=(TUid*) aArg2; + if (IsPresent(*mtmtypeuid)) + RemoveRegisteredMtmDll(*mtmtypeuid); + break; + } + default: + break; + } + };