cbs/CbsServer/ServerInc/CCbsMcnSession.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) 2003 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:  This file contains the header file of the CCbsMcnSession class which 
*                responds to client MCN-related requests.
*
*/




#ifndef     CCBSMCNSESSION_H
#define     CCBSMCNSESSION_H

//  INCLUDES

#include <e32base.h>
#include "CCbsObject.h"
#include "MCbsMcnSubscriptionsProvider.h"
#include "CbsMcnCommon.h"

//  FORWARD DECLARATIONS

class CCbsDbImpSettings;
class CCbsRecEtel;
class CCbsReceiverHelper;
class CCbsRecMessage;
class CCbsSession;

//  CLASS DECLARATION 

/**
*   CCbsMcnSession is the server-side subsession object, which takes care
*   of client-side MCN requests.
*/
class CCbsMcnSession 
        : public CCbsObject, public MCbsMcnSubscriptionsProvider
    {
    public:     // New functions
        /**
        *   Creates a new instance of the class.
        *
        *   @param  aSession            Main session instance.
        *   @param  aReceiver           Receiver instance.
        *   @return                     New instance of CCbsMcnSession.
        */
        static CCbsMcnSession* NewL( CCbsSession& aSession, 
            CCbsRecEtel& aReceiver );

        /**
        *   Destructor.
        */
        ~CCbsMcnSession();

    public:     // From CCbsObject
        /**
        *   Handle the requests for the object.
        *
        *   @param  aMessage            Message to be handled.
        *   @return                     Indicates whether the message was 
        *                               handled.
        */
        TBool HandleRequestsL( const RMessage2& aMessage );

    public:     // From MCbsMcnSubscriptionsProvider
        /**
        *   Returns the number of topic subscriptions of this MCN client.
        *
        *   @return                     Number of subscribed CB topics
        */
        TUint NumberOfSubscriptions() const;

        /**
        *   If aMessage is of topic subscribed by the client,
        *   aMessage is copied to client-side. 
        *
        *   @param  aMessage            CB message.
        */
        void RouteMessageL( const CCbsMessage& aMessage );

    private:
        /**
        *   Constructor.
        *
        *   @param  aSession            Main session object.
        *   @param  aReceiver           Receiver instance.
        */
        CCbsMcnSession( CCbsSession& aSession, CCbsRecEtel& aReceiver );

        /**
        *   Finalizes construction.
        */
        void ConstructL();

        /**
        *   Close the subsession.
        */
        void CloseMcnSession();

        /**
        *   Handles client request for message routing.
        */
        void NotifyOnChange();

        /**
        *   Handles client request to cancel an outstanding 
        *   routing request.
        */
        void NotifyOnChangeCancel();

        /**
        *   Handles client request to subscribe a topic.
        *
        *   Note: ApplySubscriptionL has to be called in order to
        *   apply receiver changes.
        */
        void SubscribeTopicL();

        /**
        *   Called by RouteMessageL() to actually copy the message content
        *   to client side.
        *
        *   @param aMcnPckg         Package containing the MCN message
        *                           and it's parameters.
        */        
        void NotifyClientL( const TPckg<TCbsMcnMessage>& aMcnPckg );                

        /**
        *   Clears all topic subscriptions of this MCN session.
        *
        *   Leaves only if CCbsRecEtel::ApplyStateChangesL() leaves.
        */
        void ClearSubscriptionsL();

        /**
        *   Forces receiver to reload CB topic subscriptions.
        *
        *   This function has to be called after MCN client has subscribed
        *   topics with SubscribeTopicL().
        */
        void ApplySubscriptionsL();
  
    private:    // Prohibited operators and functions

        // Copy constructor
        CCbsMcnSession( const CCbsMcnSession& );

        // Assignment operator
        CCbsMcnSession& operator=( const CCbsMcnSession& );


    private:    // Data
        
        /// Receiver object.
        CCbsRecEtel& iReceiver;

        /**
        *   Indicates whether iMessage is a valid message; that is, there
        *   is a pending notify request.
        */
        TBool iIsMessage;

        /// Message for the pending notify request 
        RMessage2 iMessage;

        /// Array of topic numbers subscribed by the client.
        CArrayFixFlat< TUint16 >* iSubscribedTopics;

        // MCN message
        TCbsMcnMessage iMcnMessage;

        // MCN message package for IPC
        TPckg<TCbsMcnMessage> iMcnPckg;

    };

#endif      //  CCBSMCNSESSION_H   
            
// End of File