presencefwsimpleadpt/inc/simplepluginwatcher.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 02 Feb 2010 01:05:17 +0200
changeset 0 c8caa15ef882
permissions -rw-r--r--
Revision: 201003 Kit: 201005

/*
* 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:    Simple Protocol implementation for Presence Framework
*
*/




#ifndef CSIMPLEPLUGINWATCHER_H
#define CSIMPLEPLUGINWATCHER_H

#include <e32std.h>

#include <protocolpresencewatching.h>

#include <msimplewatcherobserver.h>

#include "simpleplugincommon.h"
#include "msimplepluginconnectionobs.h"
#include "msimplepluginsettings.h"


class TXIMPRequestId;
class MXIMPIdentity;
class MXIMPProtocolConnectionHost;
class MPersonPresenceInfo;
class MXIMPObjectCollection;

class MSimpleDocument;
class MSimpleWatcher;

class CSimplePluginEntityWatcher;
class CSimplePluginXdmUtils;

/**
 * CSimplePluginWatcher
 *
 * Simple Engine Connection
 *
 * @lib ?library
 * @since s60 v5.0
 */
NONSHARABLE_CLASS( CSimplePluginWatcher ): public CActive,
    public MProtocolPresenceWatching
    {
    
private:

    /**
     * Current operation
     */
    enum TPluginWatcherOperation
        {
        EPluginUndef,
        EPluginSubscribeGroup,
        EPluginUnsubscribeGroup
        };
        
    /**
     * Current actibe object state
     */
    enum TPluginXdmState
        {
        EPluginIdle,
        EPluginInitXdm,
        EPluginFetchRls,
        EPluginAddGroupMember,
        EPluginRemoveGroupMember
        // EPluginCommitRls,
        // EPluginCommitXdm
        };        
            
public:

    /**
     * Constructor.
     * @param aconnSets current settings
     * @param aObs callback for complete requests
     * @param aConn Simple Engine connection
     */
    static CSimplePluginWatcher* NewL(
        MSimplePluginSettings& aConnSets,
        MSimplePluginConnectionObs& aObs,
        MSimpleConnection& aConn );

    virtual ~CSimplePluginWatcher();

    /**
     * SetHost
     *
     * Set PrFw Host
     *
     * @lib ?library
     * @since s60 v5.0
     * @patam aHost PrFW Host
     */
    void SetHost( MXIMPProtocolConnectionHost* aHost );

    /**
     * SIP Watcher is complets it's task.
     * @param aStatus error status
     */
    void CompleteWatcher( TInt aStatus );

    /**
     * Delete a single entity watcher
     * @param aPresentityid presentity id
     */
    void DeleteWatcher(
        const TDesC8& aPresentityid );

    /**
     * Get Block list
     * @param aList list name
     * @param aMembers blocked users [OUT]
     */
    void GetEntitiesInListL(
        const TDesC& aList,
        MXIMPObjectCollection& aMembers );


private:

    CSimplePluginWatcher(
        MSimplePluginSettings& aConnSets,
        MSimplePluginConnectionObs& aObs,
        MSimpleConnection& aConn );

    void ConstructL( );
    
    /**
     * Calls MXIMPProtocolConnectionHost callback
     * @param aStatus error status
     */
    void CompletePrFwReq( TInt aStatus ); 
    
    /**
     * Handles RunL routines for subscription
     */
    void DoRunForSubscriptionL();
    
    /**
     * Handles RunL routines for unsubscription
     */
    void DoRunForUnsubscriptionL();    


public:


// from base class MXIMPBase
public:

    /**
     * Defined in a base class
     */
    TAny* GetInterface(
        TInt32 aInterfaceId,
        TIfGetOps aOps );

    /**
     * Defined in a base class
     */
    const TAny* GetInterface(
        TInt32 aInterfaceId,
        TIfGetOps aOps ) const;

    /**
     * Defined in a base class
     */
    TInt32 GetInterfaceId() const;


// from base class MProtocolPresenceWatching
public:

    /**
     * Defined in a base class
     */
    void DoSubscribePresentityPresenceL(
            const MXIMPIdentity& aPresentityId,
            const MPresenceInfoFilter& aPif,
            TXIMPRequestId aReqId );

    /**
     * Defined in a base class
     */
    void DoUpdatePresentityPresenceSubscriptionPifL(
            const MXIMPIdentity& aPresentityId,
            const MPresenceInfoFilter& aPif,
            TXIMPRequestId aReqId );

    /**
     * Defined in a base class
     */
    void DoUnsubscribePresentityPresenceL(
            const MXIMPIdentity& aPresentityId,
            TXIMPRequestId aReqId );

    /**
     * Defined in a base class
     */
    void DoSubscribePresentityGroupMembersPresenceL(
            const MXIMPIdentity& aGroupId,
            const MPresenceInfoFilter& aPif,
            TXIMPRequestId aReqId );

    /**
     * Defined in a base class
     */
    void DoUpdatePresentityGroupMembersPresenceSubscriptionPifL(
            const MXIMPIdentity& aGroupId,
            const MPresenceInfoFilter& aPif,
            TXIMPRequestId aReqId );

    /**
     * Defined in a base class
     */
    void DoUnsubscribePresentityGroupMembersPresenceL(
            const MXIMPIdentity& aGroupId,
            TXIMPRequestId aReqId );

protected:

// from base class CActive

    /**
     * Defined in a base class
     */
    void RunL();

    /**
     * Defined in a base class
     */
    TInt RunError( TInt aError );

    /**
     * Defined in a base class
     */
    void DoCancel();

private:

    /**
     * Match existing watcher
     * @param aPresentityId presentity id
     * @return watcher or NULL when not found
     */
    CSimplePluginEntityWatcher* MatchWatcher2L(
        const TDesC8& aPresentityId, TBool aCreate );

    /**
     * Save presentity id
     * @param aPresentityId presentity id
     */
    void SetPresIdentityL(
        const MXIMPIdentity& aPresentityId );

    /**
     *  Start watching service in RLS
     */
    void StartWatchingRlsL();

    void StartXdmOperationL();
    
    /**
     * StartXdmoperationL calls this
     */
    void DoStartXdmOperationL();    
    
    void GetListContentL();  
    
    /**
     * Copy data from aIds and from aNames into aCollection
     * @param aNames group member names [IN]
     * @param aNames group member display names [IN]
     * @param aCollection collection of MPresentityGroupMemberInfo [OUT]
     */        
    void CopyGroupMembersToCollectionL( 
        CPtrCArray& aIds, CPtrCArray& aNames, MXIMPObjectCollection& aCollection);
        
    /**
     * DoSubscribePresentityPresenceL calls this. 
     */
    void DoDoSubscribePresentityPresenceL(
            const MXIMPIdentity& aPresentityId,
            TXIMPRequestId aReqId );  
            
    /**
     * DoUnsubscribePresentityPresenceL calls this.
     */
    void DoDoUnsubscribePresentityPresenceL(
            const MXIMPIdentity& aPresentityId,
            TXIMPRequestId aReqId );  
          
    /**
     * DoDoUnsubscribePresentityGroupMembersPresenceL calls this
     */        
    void DoDoUnsubscribePresentityGroupMembersPresenceL(
            const MXIMPIdentity& aGroupId,
            TXIMPRequestId aReqId );                                  


private: // Data

    /**
     * Current settings
     */
    MSimplePluginSettings& iConnSets;

    /**
     * PrFw Plugin connection observer
     */
    MSimplePluginConnectionObs& iConnObs;

    /**
     * SIMPLE engine connection
     */
    MSimpleConnection& iConnection;

    /**
     * SIMPLE engine watchers
     */
    RPointerArray<CSimplePluginEntityWatcher> iWatchers;

    /**
     * Current PrFW request id
     */
    TXIMPRequestId iPrFwId;

    /**
     * Current presentity in progress
     * Own.
     */
    HBufC16* iPresIdentity;

    /**
     * XDM Utils
     * Not own.
     */
    CSimplePluginXdmUtils* iXdmUtils;

    /**
     * Whether the request is completed
     */
    TBool iCompleted;
    
    TPluginWatcherOperation iOperation;
    
    TPluginXdmState iXdmState;

    };

#endif // CSimplePluginWatcher_H