diff -r 000000000000 -r dfb7c4ff071f commsfwtools/preparedefaultcommsdatabase/src/CommsDatNotifier.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/commsfwtools/preparedefaultcommsdatabase/src/CommsDatNotifier.h Thu Dec 17 09:22:25 2009 +0200 @@ -0,0 +1,133 @@ +// Copyright (c) 2004-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: +// Notification handling for client requests for notificaiton on database changes +// +// + +/** + @file + @internalTechnology +*/ + + +#if (!defined COMMSDATNOTIFIER_H) +#define COMMSDATNOTIFIER_H + +#include + +namespace CommsDatInternal +{ + +using namespace CommsDat; + +NONSHARABLE_CLASS(TCommsDatPubSubNotification) +//@internalComponent +//@released + { +public: + TCommsDatPubSubNotification(); + void Set(TUid aUid, TInt aVal); +public: + TUid iUid; + TInt iValue; + }; + +_LIT(KCommsdatNotifierExecutable,"ShimNotifierSvr"); +/** Commsdat Notifier +* +* @internalComponent */ +class RCommsdatNotifier : public RSessionBase + { +public: + RCommsdatNotifier(); + TVersion Version() const; + + TInt Connect(); + void RequestNotification(TRequestStatus& aStatus); + void CancelNotification(TRequestStatus& aStatus); + void CancelAllNotifications(); + void Close(); +private: + TInt StartNotifierProcess(); + }; + + +NONSHARABLE_CLASS(CCDNotifier) : public CBase +/* +This class records notification requests from clients and completes them when +own TRequestStatus is completed by storage server. + +CommsDat doesn't need to act on the info itself. +It is just acting as a broker for the client to completely hide the db server. + +FUTURE - At the moment CommsDat makes a simple general request for notification on the whole repository. +Because this is all that Commdb does. It would be good to change this to register for individual areas of change. + +This class also publishes notification of changes made to the database by this client process +where pub/sub notification is required +*/ +{ +public : + + CCDNotifier(CMDBSessionImpl& aOwner); + + ~CCDNotifier(); + + static CCDNotifier* NewL(CMDBSessionImpl& aOwner); + + void ConstructL(); + + // Functions to inform clients of commsdat events. + + TInt RegisterNotifyL(TRequestStatus& aStatus); + + TInt CancelNotify(TRequestStatus& aStatus); + + TInt CancelAllNotifications(); + + TInt NotifyClients(TInt aEventType); + + void SuppressRollBackEvents() + { + iSuppressRollBackEvents = ETrue; + } + + // Functions for publish and subscribe notification + + void MaybeNotifyChange(TMDBElementId aElementId); + void MaybeNotifyChangeForDelete(TMDBElementId aElementId, TBool aModemBearerDeleted); + + void NotifyAllChanges(); + + void ClearPubSubNotifications(); + + TUint32 GetNewNumber(TUid aUid); + + void ConvertToUid(TMDBElementId aId, TCommsDatPubSubNotification& aNotification); + +private : + + TBool iSuppressRollBackEvents; + RArray iNotifications; + + RCommsdatNotifier iNotifier; + + CMDBSessionImpl& iOwner; +}; + +// + +} // namespace CommsDatInternal + +#endif //COMMSDATNOTIFIER_H