imservices/instantmessagingcache/imcacheserver/inc/cimcachesession.h
author hgs
Wed, 03 Nov 2010 09:32:20 +0530
changeset 51 61fad867f68e
permissions -rw-r--r--
201041

/*
* 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:  cache session class declaration
*
*/

#ifndef __CIMCACHESESSION_H__
#define __CIMCACHESESSION_H__

#include <e32base.h>
#include <s32mem.h>
#include <imcachedefs.h>

// FARWORD DECLARATION
class CIMCacheServer;
class CCacheServerActiveHelper;
class MIMCacheMessageHeader ;
class CIMCacheMessageBase;
class CIMCacheBufferArray;

/**
 * Service side session.
 */
 class CIMCacheSession : public CSession2
    {
    
      
    public:     
    
    	/**
        * NewL.
        * Constructors
        */
        static CIMCacheSession* NewL();
        /**
        * ~CIMCacheSession
        * destructors
        */
        virtual ~CIMCacheSession();


    protected:  // C++ constructors
    	/**
        * C++ default constructor.
        */
        CIMCacheSession();

        /**
        * Symbian OS constructor
        */
		void ConstructL();

    public:     // Methods derived from CSession2
    	/**
    	* From CSession2
    	*/
        void CreateL();
    	/**
    	* From CSession2
    	*/
        void ServiceL( const RMessage2 &aMessage );
    	/**
    	* From CSession2
    	*/
        void ServiceError( const RMessage2& aMessage,
                           TInt aError );
		
   

	public: // New methods
		
        /**
        * Server , 
        * @return server reference
        */
        CIMCacheServer* Server() 
	        { 
	        return (CIMCacheServer*) CSession2::Server(); 
	        }

		/**
         * pack and notify msg notification  
         * @param aChangeType , notification type
         * @param aMsgHeader, chat header 
         * @param aMessage , a message
         * @param aServiceId ,service id
         */	
        void PackAndNotifyEventL( TIMCacheOperationsCode aChangeType ,
								  MIMCacheMessageHeader* aMsgHeader = NULL , 
								  CIMCacheMessageBase* aMessage = NULL );
       
        /*
         * return the service Id of session
         */
        TInt ServiceId() const ;
        
     private:    // New methods

		
        /**
		*  Dispatch clients message
	    *  @since
		*  @param aMessage client's message
        */
        TBool DispatchMessageL( const RMessage2 &aMessage );


		/**
		* Initializes the server
		* @param aMessage client's message
		*/
        void InitSessionL( const RMessage2& aMessage );
        
    
        
        /**
		* reset all conversation, start flag to EFalse
		*/
        void ResetHeaderInoformation();
        
      
		/**
		* Externalizes all chat data
		* @param aArray, array of buffered headers..
		* @param aSize total size of buffered messages.
		* @param aMore , still data is pending to be send
		*/
		void ExternalizeBufferedDataL(TIMCacheOperationsCode aOperationCode,
									  RPointerArray<HBufC8>& aArray , 
									  TInt aTotalSize , 
									  TBool aMore = EFalse );
	
		/**
		* Externalizes chat headers
		* @param aChangeType, event type
		* @param aMsgHeader, chat header
		* @param aMessage , chat message
		* @param aServiceId , serviceid
		*/
		void ExternalizeChatItemL( TIMCacheOperationsCode aChangeType ,
								   TInt aServiceId = KErrNotFound );
		
		/**
		* Externalizes all  chat header messages.
		* @param aChangeType, event type
		* @param aMsgHeader, chat header
		*/						    
		void SendChatListDataL( TIMCacheOperationsCode aChangeType ,
							    MIMCacheMessageHeader* aMsgHeader );
		
		/**
		* send unread change notification
		* @param aMsgHeader, chat header
		* @param aMessage , chat message
		*/					    
		void SendUnreadChangeNotificationL(MIMCacheMessageHeader* aMsgHeader, 
										   CIMCacheMessageBase* aMessage );
		
		/**
		* Externalizes single chat item.
		* @param aMsgHeader, chat header
		*/								   
		void ExternalizeSingleChatItemL( TIMCacheOperationsCode aChangeType, MIMCacheMessageHeader* aMsgHeader );
		
		
		/**
		* Externalizes single chat messages.
		* @param aMsgHeader, chat header
		* @param aMessage , chat message
		*/
		void ExternalizeSingleChatDataL(TIMCacheOperationsCode aChangeType,
										MIMCacheMessageHeader* aChatHeader, 
										CIMCacheMessageBase* aMessage );
		
		/**
		* Externalizes all  chat messages in a message header
		* @param aChangeType, event type
		* @param aMsgHeader, chat header
		*/
		void ExternalizeChatDataL(TIMCacheOperationsCode aChangeType ,MIMCacheMessageHeader* aChatHeader );
		
		/**
		* write data to stream
		* @param aChatHeader, chat header
		* @param aSize total size of buffered messages.
		* @return a HBufC8 stream buffer pointer
		*/
		HBufC8* GetPackedChatItemBufferL(MIMCacheMessageHeader* aChatHeader, TInt& aSize);
		
		/**
		* write data to stream 
		* @param aMsg, message
		* @param aMsgHeader, chat header
		* @param aSize total size of buffered messages.
		* @return a HBufC8 stream buffer pointer
		*/
		HBufC8* GetPackedChatDataBufferL(CIMCacheMessageBase* aMsg , 
										 MIMCacheMessageHeader* aActiveHeader ,
										 const TInt aSize);
		/**
		* do request complete 
		* @param aChangeType, type of request
		*/								 
	//	void DoRequestComplete( TIMCacheOperationsCode aChangeType );								 	
    private:    // Data
    	//owned, message completed state
    	TBool iMessageCompleted;
             	
        //does observer is active
        TBool iObserverActive;
        
        //msg observer
        RMessage2 iObserverMessage;
                        
		// not owned, active helper
		CCacheServerActiveHelper* iHelper;
	
		// owns, pending packets to be sent to ui client
		RPointerArray<CIMCacheBufferArray> iPacketsArray;
	
    	// read only right initialized
		TBool iAccessorInitialized;
		// conversation r/w initialized
		TBool iConvesationInitialized;
		
		// owns : add request fetch completed or not
		TBool iOpenChatFetchCompleted;		   
		
		// service id for this session
		TInt iServiceId;
	
		};

#endif      //  __CIMCACHESESSION_H__


//  END OF FILE