IMPSengine/imapi/Inc/imclientimpl.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Fri, 19 Feb 2010 22:44:11 +0200
branchRCL_3
changeset 6 d96c135bc497
parent 0 094583676ce7
permissions -rw-r--r--
Revision: 201002 Kit: 201007

/*
* Copyright (c) 2005 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:  Implementation of the IM Client interface (imclient.h)
*
*/



#ifndef IMAPI_IMCLIENTIMPL_H
#define IMAPI_IMCLIENTIMPL_H

//  INCLUDES
#include "imclient.h"
#include "impsimcli.h"


// FORWARD DECLARATIONS
class CImConnectionImpl;

// CLASS DECLARATION
/**
*  Implementation of the MImClient abstract interface
*
*
*  @lib imclient.lib
*  @since S60 3.0
*/
class CImClient :   public CBase,
            public MImClient,
            public MImpsImHandler2,
            public MImpsErrorHandler2
    {
    public:  // Constructors and destructor

        /**
        * Two-phased constructor.
        * @param aImConnection the Connection
        */
        static CImClient* NewL( CImConnectionImpl& aImConnection );

        /**
        * Destructor.
        */
        virtual ~CImClient();

    public: // New functions

        /**
        * Gets the Imps IM handler
        * @since S60 3.0
        * @return MImpsImHandler
        */
        MImpsImHandler2* ImpsImHandler();

        /**
        * Gets the Imps Error handler
        * @since S60 3.0
        * @return MImpsErrorHandler
        */
        MImpsErrorHandler2& ImpsErrorHandler();

        /**
        * Gets the Imps Engine
        * @since S60 3.0
        * @return RImpsEngine
        */
        RImpsEng& ImpsEngine();

        /**
        * Gets the 3rd party IM observer
        * @since S60 3.0
        * @return MImObserver
        */
        MImObserver* ClientObserver();

    public: // Functions from base classes

        /**
        * From MImClient
        * @see MImClient::RegisterL
        */
        virtual void RegisterObserverL(
            MImObserver* aObserver );

        /**
        * From MImClient
        * @see MImClient::UnregisterL
        */
        virtual void UnregisterObserver( );

        /**
        * From MImClient
        * @see MImClient::SendPToPMessage
        */
        virtual TInt SendPToPMessageL(
            const TContactItemId& aContactItem,
            const TDesC16& aContent );

        /**
        * From MImClient
        * @see MImClient::SendPToPMessage
        */
        virtual TInt SendPToPMessageL(
            const CContactIdArray&  aContactIds,
            const TDesC&            aContentType,
            const TDesC8&           aContent );

        /**
        * From MImClient
        * @see MImClient::SendPToPMessage
        */
        virtual TInt SendPToPMessageL(
            const MDesCArray&   aUserIds,
            const TDesC&        aContentType,
            const TDesC8&       aContent );

        /**
        * From MImClient
        * @see MImClient::SendPToPMessage
        */
        virtual TInt SendPToPMessageL(
            const TDesC& aUserId,
            const TDesC16& aContent );

        /**
        * From MImClient
        * @see MImClient::SendPToPMessage
        */
        virtual TInt SendPToPMessageL(
            const CContactIdArray&  aContactIds,
            const TDesC16&          aContent );

        /**
        * From MImClient
        * @see MImClient::SendPToPMessage
        */
        virtual TInt SendPToPMessageL(
            const MDesCArray&   aUserIds,
            const TDesC16&      aContent );
        /**
        * From MImpsImHandler2
        * @see MImpsImHandler2::HandleNewTextMessageL
        */
        virtual void HandleNewTextMessageL(
            TInt                aOpId,
            const TDesC&        aMessageId,
            const TDesC&        aSender,
            const TDesC&        aGroupId,
            const MDesCArray&   aRecipients,
            const MDesCArray&   aScreenNames,
            const TDesC&        aText,
            TImpsCspIdentifier& aCspId );

        /**
        * From MImpsImHandler2
        * @see MImpsImHandler::HandleSendCompleteL
        */
        virtual void HandleSendCompleteL(
            TInt                aOpId,
            TBool               aDeliveryReportOrdered,
            TImpsCspIdentifier& aCspId );

        /**
        * From MImpsImHandler2
        * @see MImpsImHandler2::HandleNewContentMessageL
        */
        virtual void HandleNewContentMessageL(
            TInt aOpId,
            const TDesC& aMessageId,
            const TDesC& aSender,
            const TDesC& aGroupId,
            const MDesCArray& aRecipients,
            const MDesCArray& aScreenNames,
            const TDesC& aContentType,
            const TDesC8& aContent,
            TImpsCspIdentifier& aCspId );

        /**
        * From MImpsImHandler2
        * @see MImpsImHandler2::HandleDeliveryReportL
        */
        virtual void HandleDeliveryReportL(
            const TDesC& aMessageId,
            TInt aResult,
            const TDesC* aDescription,
            TImpsCspIdentifier& aCspId );

        /**
        * From MImpsErrorHandler
        * @see MImpsErrorHandler::HandleErrorL
        */
        virtual void HandleErrorL(
            TInt                 aStatus,
            TInt                 aOpId,
            const TDesC*         aDescription,
            const CImpsDetailed* aDetailedRes,
            TImpsCspIdentifier&  aCspId );


    private:

        /**
        * C++ default constructor.
        * @param aImConnection the Connection
        */
        CImClient( CImConnectionImpl& aImConnection );

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

        /**
        * Sends IM using WV client
        * @param aUserIds the recipients list
        * @param aContentType the content type of the message
        * @param aContent the message
        * @return OpId
        */
        TInt DoSendMessageL(
            const MDesCArray&   aUserIds,
            const TDesC&        aContent );


        /**
        * Deletes the OpId from the outstanding OpIds list
        * @param aOpId an OpId to be deleted
        */
        void RemoveOpId( TInt aOpId );


    private:    // Data
        CImConnectionImpl&  iImConnection;  // The API manager (not owned)
        RImpsImClient2      iImClient;      // Imps IM client
        MImObserver*        iClientObserver;// The user observer (not owned)
        RArray<TInt>        iOutstandingOpIds; // OpIds waiting for response
    };

// CLASS DECLARATION
// Detailed result item received from the remote SAP
class TDetailedResultItem
    {
    public:
        TDetailedResultItem();
        ~TDetailedResultItem();

        /**
        * Error code setter
        * @param aErroCode the error code
        */
        void SetErrorCode( TInt aErroCode );

        /**
        * Error code getter
        * @return the error code
        */
        TInt ErrorCode( ) const;

        /**
        * User ID setter
        * @param aUserId the user ID
        */
        void SetUserId( TDesC& aUserId );

        /**
        * User ID getter
        * @return the user ID
        */
        const TDesC& UserId( ) const;

    private:
        TInt    iErrorCode;
        TPtrC   iUserId;
    };

/**
*  Implementation of the MImClientDetailedError abstract interface
*
*
*  @lib imclient.lib
*  @since S60 3.0
*/
class CImClientDetailedErrorImpl :  public CBase,
            public MImClientDetailedError
    {
    public:  // Constructors and destructor

        /**
        * Two-phased constructor.
        * @param aImConnection the Connection
        */
        static CImClientDetailedErrorImpl* NewL(
            const CImpsDetailed* aImpsDetailed );

        /**
        * Destructor.
        */
        virtual ~CImClientDetailedErrorImpl();

    public: // Functions from base classes

        /**
        * From MImClientDetailedError
        * @see MImClientDetailedError::Count
        */
        TInt Count();

        /**
        * From MImClientDetailedError
        * @see MImClientDetailedError::UserId
        */
        const TDesC& UserId( TInt aIndex );

        /**
        * From MImClientDetailedError
        * @see MImClientDetailedError::ErrorCode
        */
        TInt ErrorCode( TInt aIndex );

    private:
        CImClientDetailedErrorImpl( );
        void ConstructL( const CImpsDetailed* aImpsDetailed );

        // Constructs the object from CImpsDetailed
        void DoInitL( const CImpsDetailed* aImpsDetailed );

        /**
        * Converts the error code returned by the WV server to API error code.
        * @since 3.0
        * @param aErroCode WV error code
        * @return API error code
        */
        TInt ConvertWVErrorCode( TInt aErrorCode );


    private: //Data
        CArrayFixFlat<TDetailedResultItem>*  iDetailedList;

    };


#endif      // IMAPI_IMCLIENTIMPL_H   

// End of File