imstutils/imconversationview/imcvuiengine/inc/cimcvenginemessagehandler.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Wed, 13 Oct 2010 14:16:29 +0300
branchRCL_3
changeset 34 e7f34e614544
parent 0 5e5d6b214f4f
permissions -rw-r--r--
Revision: 201039 Kit: 201041

/*
* Copyright (c) 2007-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:  message handler class declaration
*
*/


#ifndef __CIMCVENGINEMESSAGEHANDLER_H__
#define __CIMCVENGINEMESSAGEHANDLER_H__

#include 	"mimcvenginemessage.h"
#include    "mimcvenginemessagecreator.h"           // For SMessageData
#include 	"mimcvenginemessagehandler.h"
#include 	"mimcvenginenewmessagehandler.h"

#include    <mimcacheeventhandler.h> // im cache 
#include    <cimcachefactory.h>
#include 	<imcachedefs.h>

#include 	<ximpcontext.h>
#include    <presencecachereadhandler2.h> // handling the presence cache events 
#include    <mpresencebuddyinfo2.h> // buddy info class
#include    "cimcvenginestoragelistener.h"

//	FORWARD CLASS DECLERATIONS
class MIMCVEngineChatInterface;
class MIMCVEngineMessageUtils;
class MIMCVEngineMessageReadInterface;
class MIMCVEngineMessageHandler;
class MIMCVEngineNewMessageHandler;
class MIMCVEngineMessageHandlerObserver;

// ximp im
class MImFeatures;
class MPresenceCacheReader2;
class MXIMPIdentity;
// im cache
class MIMCacheUpdater;
class CIMCacheFactory;

class CIMCVEngineOpenChats;
class CIMCVEngineStorageListener;
class MIMCVEngineStorageObserver;
// CLASS DECLARATION

/**
 *  Handler class for incoming and outgoing messages
 *
 *  @lib imcvengine.dll
 *  @since 5.0
 */

class CIMCVEngineMessageHandler : 	public CBase, 
									public MIMCVEngineMessageHandler,
									public MIMCVEngineServiceSessionHandler,
								    public MIMCacheEventHandler,
								    public MPresenceCacheReadHandler2,
								    public MIMCVEngineStorageObserver
    {
    friend class CIMCVUiEngine_TestSendMessage;
    
    public: // Construction

        /**
         * Construction
         * @param aMessageUtils Access to message utils ( Message creator, 
		 * @param aContext, Access to Context
		 * @param aServiceId , Service Id
		 * @param aOwnId - OwnUserId
         * @return Pointer to new created instance of CIMCVEngineMessageCreator
         */
        static CIMCVEngineMessageHandler* NewL( MIMCVEngineChatInterface& aChatInterface, 
                                                MIMCVEngineMessageCreator& aMessageCreator,
                                             	MXIMPContext* aContext, 
	                							TInt aServiceId ,
	                							const TDesC& aOwnId);

        /**
         * two phase Construction
         * @param aMessageUtils Access to message utils ( Message creator, 
		 * @param aContext, Access to Context
		 * @param aServiceId , Service Id
		 * @param aOwnId - OwnUserId
         * @return Pointer to new created instance of CIMCVEngineMessageCreator
         */
        static CIMCVEngineMessageHandler* NewLC( MIMCVEngineChatInterface& aChatInterface, 
                                                MIMCVEngineMessageCreator& aMessageCreator,
                                             	MXIMPContext* aContext,
												TInt aServiceId ,
												const TDesC& aOwnId);

        /**
         * Destruction
         */
        ~CIMCVEngineMessageHandler();
        
        
        /**
         * ResetContextL
         * @param aContext, new context 
         */
        void ResetContextL(MXIMPContext* aContext);
        

    private: // Construction

        /**
         * Constructor
         * @see CIMCVEngineMessageHandler::NewL
         * @param aChatInterface, reference to chat interface
         * @param aMessageUtils, reference to the message utils
         * @param aContext, reference to ximpfw context 
         */
        CIMCVEngineMessageHandler( MIMCVEngineChatInterface& aChatInterface,
                                    MIMCVEngineMessageCreator& aMessageCreator,
                                    MXIMPContext* aContext ,
					                TInt aServiceId);

        /**
         * Constructor
         */
        void ConstructL(const TDesC& aOwnId );
		
		/**
         * read service name from csp settings
         * @param aServiceId, service id.
        */
		void ReadServiceNameL(TInt aServiceId );
		
			
		/**
         * handle the failed messages
         * @param aMessage, message 
         */
		void HandleMessageSentFailedL( MIMCVEngineMessage& aMessage ) ;
		
		
    public: // From MIMCVEngineServiceSessionHandler

               
        /**
		* @see HandleDeliveryReportL
		* to handle the new message delivery report
		* @param aResultError, delivery report
		* @param aText, msg to send
		*/
		void HandleDeliveryReportL( TXIMPRequestId aOperatioCode,
									 TInt aResultError )  ;
       
        
		
		/**
		 * @see HandleConnectionTerminatedL
		 * to handle the connection lost
		 * @param aReason, reason report
		 */
		void HandleConnectionEventL( TIMCVConnectionState aState, TInt aReason ) ;
		
   public :	//MIMCVEngineMessageHandler
   		
        MIMCVEngineMessageCreator& MessageCreator() const ;
       
	   /** SendMessageL 
		*  api to send the message to below layer
		* @param aMessage, message to be send
		*/	
        void SendMessageL(MIMCVEngineMessage& message);
        
        /** append to cache 
		*  api to send the message to below layer
		* @param aBuddyId, a buddyId 
		* @param aTextMessage, message to be saved
		*/	
        void AppendToCacheL(const TDesC& aBuddyId, const TDesC& aTextMessage );
        
		
		/**
		 * @see MIMCVEngineMessageHandler
		 */
		void StartNewConversationL(const TDesC& aRecipientId );
		
		
		/**
		 * @see MIMCVEngineMessageHandler
		 */
		TInt CloseConversationL(const TDesC& aBuddyId);
		
		/**
		 * @see MIMCVEngineMessageHandler
		 */
		void CloseAllConversationL();
		
		/**
		 * @see MIMCVEngineMessageHandler
		 */
		TInt DeactivateConversationL();	


		void UnSubscribePresenceL(const TDesC& aRecipientId);
		/**
		 * @see MIMCVEngineMessageHandler
		 */
		void SubscribePresenceL(const TDesC& aWVID);
		
		/**
		 * @see MIMCVEngineMessageHandler
		 */
		void SetObserver( MIMCVEngineMessageHandlerObserver* aObserver ) ;
		
		/**
		 * @see MIMCVEngineMessageHandler
		 */
		void RemoveObserver();
		
		/**
		 * @see MIMCVEngineMessageHandler
		 */
		TIMCVOnlineStatus GetPresenceStatus();
		
		/**
		 * @see MIMCVEngineMessageHandler
		 */
		RArray<SIMCacheChatItem> GetChatListL( TInt aServiceId );		
		
		/**
		 * @see MIMCVEngineMessageHandler
		 */
		CIMCVEngineOpenChats& OpenChats() ;
		
		TInt ServiceId() const ;
		
		
	public:     // MIMCacheMessageChangeObserver
    
    	/**
    	* Gets called when data update is available.
    	* Client can then decide wether to use the old one
    	* or the updated one.
    	* @param aNewMessage, new message details
       	*/
        void HandleIMCacheEventL(TIMCacheEventType aEvent, TAny* aChatMessage = NULL ) ;
        
   public: // prescachereadhandler
	
	     /**
          * Handler for Asynchronous methods of MPresenceCacheReader.
          * @param aErrorCode 
          * @param aPresenceBuddyInfoList presence infos for all buddies requested. 
          *         Ownership to callee. Can be null 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 :
    
    	/** NotifyOperationCompletdL 
	    * @param aResult, aResult to be send
		*/	
    	void NotifyOperationCompletdL(MIMCVEngineMessage::TMessagerType aType , TInt aResult  );        
    	
    	/** Helper Functions
	    * 
		*/
    	MIMCVEngineMessage::TMessageType  GetEngineMessageType(TIMCacheMessageType aType );
    	MIMCVEngineMessage::TMessagerType GetEngineMessagerType(TIMCacheMessagerType aType );
    	MIMCVEngineMessage::TContentType  GetEngineContentType(TIMCacheContentType aType ); 
    	
    	/**
         * ReadPresenceStatusL,
         * read the presence status and text from presence cache
         * @param aIdentity ,   identity  in the XSP format
         **/
    	void ReadPresenceStatusL(const TDesC& aIdentity );
    	/**
         * ConvertStringToStatus,converts the string to enums for presence status
         * aAvailabilityEnum enum value indicating the presence status.
         * aAvailabilityText, availability text to support multiple presence.
         * @return staus.
         **/
    	TIMCVOnlineStatus ConvertPresenceCacheEnums(MPresenceBuddyInfo2::TAvailabilityValues  aAvailabilityEnum, TPtrC aAvailabilityText); 
       	
    	 /**
          * Converts the  presence cache extension keys 
          * user for block and pending states  to client supported presence status.
          * 
          * @since 5.0
          * @param aPresenceBuddyInfo presence buddy info class.
          */
        void GetKeyFiledsAndValuesL(MPresenceBuddyInfo2& aPresenceBuddyInfo);

		/*
		* call back after fetching the display name and link
		*/
         void HandleServiceBuddyDetailsFetchedL(TInt aServiceId, 
                        const TDesC& aXspId,
                        const TDesC8 & aContactLink,
                        const TDesC & aDisplayName )  ;
    	
    private: // Member data
    
        // Owns , reference to message creator
        MIMCVEngineMessageCreator&  iMessageCreator;
   	
    	/// Does not own. Access to message containers
    	MIMCVEngineChatInterface& iChatInterface;
    	   
        //  owns : storage change listener
        CIMCVEngineStorageListener* iStorageListener;
    
    	// not woned
    	MXIMPContext* iContext;	
    	
       	// woned ,delet it 
        MImFeatures* iImFeatures;
        
        /// Messages which are send to the server
        // removed once delivered successfully to server
    	RPointerArray< MIMCVEngineMessage > iHoldingMessages;
    	
    	// not owned , send observers
    	MIMCVEngineMessageHandlerObserver* iObserver;
    	
    	// owned, access to accesss/update interface  
    	// call realease of factory
    	CIMCacheFactory* iIMCacheFactory;
    	
    	// owned, access/update to imcache
   		MIMCacheUpdater* iIMCacheUpdater;
   	
   		//owns
       	MPresenceCacheReader2* iPresenceCacheReader;
            	
       	// owns , presence status
       	TIMCVOnlineStatus iPresenceStatus;
       	
       	// owns , service name
       	HBufC* iServiceName;
       	
       	// owns
       	CIMCVEngineOpenChats* iOpenChats;
       	
       	TInt iServiceId;
      
   	    	  
    };
    
#endif      // __CIMCVENGINEMESSAGEHANDLER_H__

// End of File