phoneclientserver/phoneserver/Inc/Messenger/CPhSrvMessengerObject.h
author Pat Downey <patd@symbian.org>
Wed, 01 Sep 2010 12:15:03 +0100
branchRCL_3
changeset 20 987c9837762f
parent 19 7d48bed6ce0c
permissions -rw-r--r--
Revert incorrect RCL_3 drop: Revision: 201033 Kit: 201035

/*
* Copyright (c) 2004 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:  Messenger object. Contains both send and receive request 
*                storages.
*
*/


#ifndef CPHSRVMESSENGEROBJECT_H
#define CPHSRVMESSENGEROBJECT_H


// INCLUDES
#include <e32base.h>

#include "PhSrvMessengerTypes.h"
#include <CPhCltCommandHandler.h>

// FORWARD DECLARATIONS
class CPhSrvSubSessionBase;


// CLASS DECLARATION

/**
*  Messenger object, i.e. request storage class.
*
*  @since 2.6
*/
class CPhSrvMessengerObject : public CBase
    {
    public:  // Constructors and destructor

        /**
        * Two-phased constructor. 
        *
        * @param aSubSession The subsession that owns this object.
        * @param aParameters The Construct parameters.
        * @return Pointer to created CPhSrvMessengerObject instance.
        */
        static CPhSrvMessengerObject* NewLC(
            CPhSrvSubSessionBase& aSubSession,
            const TPhCltMessengerParameters& aParameters );


        /**
        * Destructor
        */
        ~CPhSrvMessengerObject();


    public: // New functions

        /**
        * Tell the external client (the requester) the result of their 
        * actions. 
        *
        * @param aResultOfAttemptingCall 
        *        The result of executing the Messenger request.
        * @param aRequest The request which result this is.
        */
        void InformOfMessengerRequest( 
            const TPhCltPhoneResults aResultOfAttemptingRequest,
            const TPhCltMessengerCommand aRequest );


        /**
        * The sub-session handle.
        *
        * @return The unique handle associated with the subsession which 
        *         initiated a command handler request.
        */
        TInt SubSessionHandle() const;


        /**
        * Sets the given request active. Use IsRequestActive() to check
        * whether request can be set active or not.
        *
        * @param aParameters The request and it's data that is set active.
        * @param aMessage The request status container.
        * @param aSentDataId The Id associated for sent message. Valid only
        *                    if the request is Send.
        */
        void SetActive( 
            const TPhCltMessengerParameters& aParameters,
            const RMessage2& aMessage,
            const TUint aSentDataId );


        /**
        * Checks if the given request is already active.
        *
        * @param aRequest The request which is checked.
        * @return ETrue if aRequest is active, EFalse otherwise.
        */
        TBool IsRequestActive( const TPhCltMessengerCommand aRequest ) const;


        /**
        * Check whether this object is ready to receive the message or not.
        * 
        * @param aSentMessage The message that should be received.
        * @param aSentDataId The Id of the sent message to be received.
        * @return ETrue if object is ready to receive, EFalse otherwise.
        */
        TBool IsReadyToReceive( 
            const TDesC8& aSentMessage,
            const TUint aSentDataId );


        /**
        * Complete the active receive request. Use IsRequestActive() to find
        * out whether this method can be called.
        * 
        * @param aSentMessage The sent message that is given to receiver.
        * @param aSentDataId The Id of the sent message.
        * @return KErrNone if the completion was successful, 
        *         Symbian error code otherwise.
        */
        TInt CompleteReceive(
            const TDesC8& aSentMessage,
            const TUint aSentDataId );


        /**
        * Return objects Send data length.
        * 
        * @return The object's Send data length.
        */
        TInt GetSendDataLength();


        /**
        * Return objects Send data.
        * 
        * @param aDes The descriptor that will contain the sent data after 
        *             return. Use GetSendDataLength() to see how big buffer is
        *             needed to return whole sent message.
        */
        void GetSendData( TDes8& sDes ) const;


        /**
        * Return objects interested Uid.
        * 
        * @return The Uid of the messages this object is interested.
        */
        const TUid& GetUid() const;


        /**
        * Return the ID of the sent message.
        * 
        * @return The Id of the sent message.
        */
        TUint SentDataId();


        /**
        * Check if the received message is skipped or not.
        * 
        * @return ETrue if the given message is skipped, otherwise EFalse.
        */
        TBool IsMessageSkipped(
            const TUint aSentDataId );


    private:

        /**
        * C++ constructor
        */
        CPhSrvMessengerObject(
            CPhSrvSubSessionBase& aSubSession );


        /**
        * By default Symbian 2nd phase constructor is private.
        */
        void ConstructL( const TPhCltMessengerParameters& aParameters );


    private:  // Data

        // The Messenger object parameters.
        TPhSrvMessengerParameters      iParameters;

        // A handle to the subsession that initiated this request.
        CPhSrvSubSessionBase&          iSubSession;
    };


#endif // CPHSRVMESSENGEROBJECT_H


// End of File