servicewidget/servicewidgetdatapublisher/inc/cservicewidgetpresencehandler.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 02 Feb 2010 10:12:18 +0200
changeset 0 5e5d6b214f4f
permissions -rw-r--r--
Revision: 201003 Kit: 201005

/*
* Copyright (c) 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:  presene status handler 
 *                
 *
*/


#ifndef CSERVICEWIDGETPRESENCEHANDLER_H
#define CSERVICEWIDGETPRESENCEHANDLER_H

#include <presencecachereader2.h>
#include <mpresencebuddyinfo2.h> // buddy info class
#include <presenceinfo.h> //Presence info test
#include <presencecachereadhandler2.h> // handling the presence cache events 
#include <ximpcontextobserver.h>
#include "servicewidgetenums.hrh"

// farword declarations
class MXIMPContext;
class MXIMPClient;
class MPresenceCacheReadHandler2;
class MServiceWidgetPresenceObserver;
class CActiveSchedulerWait;
class MXIMPBase;
class MPresenceFeatures;
class CServiceWidgetBuddyPresence;
class CFbsBitmap;

// class defnitions
class CServiceWidgetPresenceHandler  : public CBase,
								  	   public MXIMPContextObserver,
							      	   public MPresenceCacheReadHandler2
							      	   
{
public:
   	 
    /**
      * Two-phased constructor.
      * @param aPresenceObserver, prsence observer
      * @param aServiceName, service name
      */
     static CServiceWidgetPresenceHandler* NewL( MServiceWidgetPresenceObserver& aPresenceObserver,
     										 const TDesC& aServiceName,
     										 const TDesC& aOwnId );

     /**
      * Two-phased constructor.
      * @param aPresenceObserver, prsence observer
      * @param aServiceName, service name
      */
     static CServiceWidgetPresenceHandler* NewLC( MServiceWidgetPresenceObserver& aPresenceObserver,
     										 const TDesC& aServiceName,
     										 const TDesC& aOwnId );
     
     /**
      * Standard C++ destructor
      */    
     ~CServiceWidgetPresenceHandler();
      
 public:
		
		/**
		* @return online counts
		*/
		TInt OnlineBuddyCount();

		/**
		* @return  all friend count
		*/
		TInt AllBuddyCount();
		
		/**
		* @return  all inviations count
		*/
		TInt GetInviteCounts();
		
		/**
		* @return on going operation id
		*/
		TWServiceOperationId GetOngoingOperationId();

		  /**
         * get the connected session
         * @param aProtocolUid, protocal to use
         * @param aServiceId, service id to use
          */ 
        void GetConnectedSessionL(TInt aProtocolUid,
        						  TInt aServiceId );
        
         /**
         * release the connected session
         */ 
        void ReleaseConnectionL();
        
        /**
         * release the connected session
         */ 
       	TWSPresenceStatus GetOwnStatus();
       

 private : // from MXIMPContextObserver
		/**
	     * HandleximpContextEvent method from context obsrver  
	     * ximp framework
	     * @param aContext
	     * @param aEvent, event  
	     */
	     void HandlePresenceContextEvent(const MXIMPContext& aContext,
	                                     const MXIMPBase& aEvent );      	
		
 private: // from prescachereadhandler
		/**
	     * Handler for AllBuddiesPresenceInService method of MPresenceCacheReader.
	     *
	     * @param aErrorCode 
	     * @param aPresenceBuddyInfoList presence infos for all buddies requested. 
	     *         Ownership of elements to callee. Can be empty if not found.
	     */   
	    void HandlePresenceReadL(TInt aErrorCode,
	         			RPointerArray<MPresenceBuddyInfo2>& aPresenceBuddyInfoList) ;
	                        
	    /**
	     * Handler for Buddy presence change notifications.
	     *
	     * @param aErrorCode 
	     * @param aPresenceBuddyInfo presence info for buddy. 
	     *         Ownership to callee. Can be NULL if aErrorCode exist.
	     */    
	    void HandlePresenceNotificationL(TInt aErrorCode,
	        					MPresenceBuddyInfo2* aPresenceBuddyInfo);
       
private: // Implementation

        /**
         * Standard C++ constructor
         */    
        CServiceWidgetPresenceHandler( MServiceWidgetPresenceObserver& aPresenceObserver );
        
        /**
         * Performs the 2nd phase of construction.
         * @param aServiceName, service name
          */        
        void ConstructL(const TDesC& aServiceName, const TDesC& aOwnId );
        
        
         /**
         * subsribe the presence change notification
          */ 
        void RetrieveSubscribedListL();
        
         /**
         * subsribe the presence change notification
         */ 
        void  SubscribeForAuthorizationL();
        
         /**
         * subsribe the presence change notification
         * @param aUserId, user  to use
          */ 
        void SubscribePresenceL( const TDesC& aUserId );
        
         /**
         * read buddy presence from cache
         */    
        void  ReadPresenceFromCacheL();
      
      	/**
         * helper method for bind complete 
         */ 
      	void DoHandleBindCompleteL();
      	
      	/**
         * helper method  buddy fetch event
         * @param aEvent, group list event
         */ 
      	void DoHandlePresentityGroupContentEventL( const MXIMPBase& aEvent );
      	
      	/**
         * helper method  friend request fetch event
         * @param aEvent, grand list event
         */ 
      	void DoHandlePresenceGrantRequestListEventL( const MXIMPBase& aEvent );
      	
      	/**
         * helper method  for converting ximpstatus to local status
         * @param aAvailabilityEnum, availability of contact
         */ 
      	TWSPresenceStatus ConvertPresenceCacheEnums(MPresenceBuddyInfo2::TAvailabilityValues aAvailabilityEnum,TPtrC aAvabilityText);
      	
      	/**
         * method for maitain the unique information about status
         * @param aUserId, a user id of contact
         * @param aStatus, status of contact
         */ 
      	void CheckAndCacheBuddyAvailabilityL( const TDesC& aUserId, TWSPresenceStatus aStatus );

private: // Data

		 // not owns : reference to presence observer for notification
        MServiceWidgetPresenceObserver& iPresenceObserver;
	     // owns : service name 
        HBufC* iServiceName;
        // owns :  own user id 
        HBufC* iOwnUserId;
        // not own
        TInt iServiceId;
	     // own , client for presence framework
        MXIMPClient*   iClient;
        // own ,presence context to prsence framework
        MXIMPContext* iPresenceCtx;
	      //Stores the XIMPFw EventTypes Subscribed for      
	    RArray< TInt32 > iAcceptedEventTypes;
	    //owns : reference to presence cache reader
		MPresenceCacheReader2* iPresenceCacheReader;
	    // owns : total budy  count 
        TInt iTotalCount;
         // owned  pointer to presence plugin
	    MPresenceFeatures* iFeatures;
	 	// own : current ongoing operation
  		TWServiceOperationId iOperationId;
  		// owns : list of presence buddy
  		RPointerArray<CServiceWidgetBuddyPresence> iOnlineBuddyArray;
  		// owns : own status
  		TWSPresenceStatus iOwnStatus;
  		// owns : invitation count
  		TInt iInvitationCount;
 
};

#endif /*CSERVICEWIDGETPRESENCEHANDLER_H*/