cbs/cbsserver/ServerInc/CCbsMcnSession.h
author hgs
Fri, 06 Aug 2010 13:08:23 +0300
changeset 36 7c428525956b
parent 33 8d5d7fcf9b59
permissions -rw-r--r--
201031
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
33
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2003 Nokia Corporation and/or its subsidiary(-ies). 
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description:  This file contains the header file of the CCbsMcnSession class which 
hgs
parents:
diff changeset
    15
*                responds to client MCN-related requests.
hgs
parents:
diff changeset
    16
*
hgs
parents:
diff changeset
    17
*/
hgs
parents:
diff changeset
    18
hgs
parents:
diff changeset
    19
hgs
parents:
diff changeset
    20
hgs
parents:
diff changeset
    21
hgs
parents:
diff changeset
    22
#ifndef     CCBSMCNSESSION_H
hgs
parents:
diff changeset
    23
#define     CCBSMCNSESSION_H
hgs
parents:
diff changeset
    24
hgs
parents:
diff changeset
    25
//  INCLUDES
hgs
parents:
diff changeset
    26
hgs
parents:
diff changeset
    27
#include <e32base.h>
hgs
parents:
diff changeset
    28
#include "CCbsObject.h"
hgs
parents:
diff changeset
    29
#include "MCbsMcnSubscriptionsProvider.h"
hgs
parents:
diff changeset
    30
#include <cbsmcncommon.h>
hgs
parents:
diff changeset
    31
hgs
parents:
diff changeset
    32
//  FORWARD DECLARATIONS
hgs
parents:
diff changeset
    33
hgs
parents:
diff changeset
    34
class CCbsDbImpSettings;
hgs
parents:
diff changeset
    35
class CCbsRecEtel;
hgs
parents:
diff changeset
    36
class CCbsReceiverHelper;
hgs
parents:
diff changeset
    37
class CCbsRecMessage;
hgs
parents:
diff changeset
    38
class CCbsSession;
hgs
parents:
diff changeset
    39
hgs
parents:
diff changeset
    40
//  CLASS DECLARATION 
hgs
parents:
diff changeset
    41
hgs
parents:
diff changeset
    42
/**
hgs
parents:
diff changeset
    43
*   CCbsMcnSession is the server-side subsession object, which takes care
hgs
parents:
diff changeset
    44
*   of client-side MCN requests.
hgs
parents:
diff changeset
    45
*/
hgs
parents:
diff changeset
    46
class CCbsMcnSession 
hgs
parents:
diff changeset
    47
        : public CCbsObject, public MCbsMcnSubscriptionsProvider
hgs
parents:
diff changeset
    48
    {
hgs
parents:
diff changeset
    49
    public:     // New functions
hgs
parents:
diff changeset
    50
        /**
hgs
parents:
diff changeset
    51
        *   Creates a new instance of the class.
hgs
parents:
diff changeset
    52
        *
hgs
parents:
diff changeset
    53
        *   @param  aSession            Main session instance.
hgs
parents:
diff changeset
    54
        *   @param  aReceiver           Receiver instance.
hgs
parents:
diff changeset
    55
        *   @return                     New instance of CCbsMcnSession.
hgs
parents:
diff changeset
    56
        */
hgs
parents:
diff changeset
    57
        static CCbsMcnSession* NewL( CCbsSession& aSession, 
hgs
parents:
diff changeset
    58
            CCbsRecEtel& aReceiver );
hgs
parents:
diff changeset
    59
hgs
parents:
diff changeset
    60
        /**
hgs
parents:
diff changeset
    61
        *   Destructor.
hgs
parents:
diff changeset
    62
        */
hgs
parents:
diff changeset
    63
        ~CCbsMcnSession();
hgs
parents:
diff changeset
    64
hgs
parents:
diff changeset
    65
    public:     // From CCbsObject
hgs
parents:
diff changeset
    66
        /**
hgs
parents:
diff changeset
    67
        *   Handle the requests for the object.
hgs
parents:
diff changeset
    68
        *
hgs
parents:
diff changeset
    69
        *   @param  aMessage            Message to be handled.
hgs
parents:
diff changeset
    70
        *   @return                     Indicates whether the message was 
hgs
parents:
diff changeset
    71
        *                               handled.
hgs
parents:
diff changeset
    72
        */
hgs
parents:
diff changeset
    73
        TBool HandleRequestsL( const RMessage2& aMessage );
hgs
parents:
diff changeset
    74
hgs
parents:
diff changeset
    75
    public:     // From MCbsMcnSubscriptionsProvider
hgs
parents:
diff changeset
    76
        /**
hgs
parents:
diff changeset
    77
        *   Returns the number of topic subscriptions of this MCN client.
hgs
parents:
diff changeset
    78
        *
hgs
parents:
diff changeset
    79
        *   @return                     Number of subscribed CB topics
hgs
parents:
diff changeset
    80
        */
hgs
parents:
diff changeset
    81
        TUint NumberOfSubscriptions() const;
hgs
parents:
diff changeset
    82
hgs
parents:
diff changeset
    83
        /**
hgs
parents:
diff changeset
    84
        *   If aMessage is of topic subscribed by the client,
hgs
parents:
diff changeset
    85
        *   aMessage is copied to client-side. 
hgs
parents:
diff changeset
    86
        *
hgs
parents:
diff changeset
    87
        *   @param  aMessage            CB message.
hgs
parents:
diff changeset
    88
        */
hgs
parents:
diff changeset
    89
        void RouteMessageL( const CCbsMessage& aMessage );
hgs
parents:
diff changeset
    90
hgs
parents:
diff changeset
    91
    private:
hgs
parents:
diff changeset
    92
        /**
hgs
parents:
diff changeset
    93
        *   Constructor.
hgs
parents:
diff changeset
    94
        *
hgs
parents:
diff changeset
    95
        *   @param  aSession            Main session object.
hgs
parents:
diff changeset
    96
        *   @param  aReceiver           Receiver instance.
hgs
parents:
diff changeset
    97
        */
hgs
parents:
diff changeset
    98
        CCbsMcnSession( CCbsSession& aSession, CCbsRecEtel& aReceiver );
hgs
parents:
diff changeset
    99
hgs
parents:
diff changeset
   100
        /**
hgs
parents:
diff changeset
   101
        *   Finalizes construction.
hgs
parents:
diff changeset
   102
        */
hgs
parents:
diff changeset
   103
        void ConstructL();
hgs
parents:
diff changeset
   104
hgs
parents:
diff changeset
   105
        /**
hgs
parents:
diff changeset
   106
        *   Close the subsession.
hgs
parents:
diff changeset
   107
        */
hgs
parents:
diff changeset
   108
        void CloseMcnSession();
hgs
parents:
diff changeset
   109
hgs
parents:
diff changeset
   110
        /**
hgs
parents:
diff changeset
   111
        *   Handles client request for message routing.
hgs
parents:
diff changeset
   112
        */
hgs
parents:
diff changeset
   113
        void NotifyOnChange();
hgs
parents:
diff changeset
   114
hgs
parents:
diff changeset
   115
        /**
hgs
parents:
diff changeset
   116
        *   Handles client request to cancel an outstanding 
hgs
parents:
diff changeset
   117
        *   routing request.
hgs
parents:
diff changeset
   118
        */
hgs
parents:
diff changeset
   119
        void NotifyOnChangeCancel();
hgs
parents:
diff changeset
   120
hgs
parents:
diff changeset
   121
        /**
hgs
parents:
diff changeset
   122
        *   Handles client request to subscribe a topic.
hgs
parents:
diff changeset
   123
        *
hgs
parents:
diff changeset
   124
        *   Note: ApplySubscriptionL has to be called in order to
hgs
parents:
diff changeset
   125
        *   apply receiver changes.
hgs
parents:
diff changeset
   126
        */
hgs
parents:
diff changeset
   127
        void SubscribeTopicL();
hgs
parents:
diff changeset
   128
hgs
parents:
diff changeset
   129
        /**
hgs
parents:
diff changeset
   130
        *   Called by RouteMessageL() to actually copy the message content
hgs
parents:
diff changeset
   131
        *   to client side.
hgs
parents:
diff changeset
   132
        *
hgs
parents:
diff changeset
   133
        *   @param aMcnPckg         Package containing the MCN message
hgs
parents:
diff changeset
   134
        *                           and it's parameters.
hgs
parents:
diff changeset
   135
        */        
hgs
parents:
diff changeset
   136
        void NotifyClientL( const TPckg<TCbsMcnMessage>& aMcnPckg );                
hgs
parents:
diff changeset
   137
hgs
parents:
diff changeset
   138
        /**
hgs
parents:
diff changeset
   139
        *   Clears all topic subscriptions of this MCN session.
hgs
parents:
diff changeset
   140
        *
hgs
parents:
diff changeset
   141
        *   Leaves only if CCbsRecEtel::ApplyStateChangesL() leaves.
hgs
parents:
diff changeset
   142
        */
hgs
parents:
diff changeset
   143
        void ClearSubscriptionsL();
hgs
parents:
diff changeset
   144
hgs
parents:
diff changeset
   145
        /**
hgs
parents:
diff changeset
   146
        *   Forces receiver to reload CB topic subscriptions.
hgs
parents:
diff changeset
   147
        *
hgs
parents:
diff changeset
   148
        *   This function has to be called after MCN client has subscribed
hgs
parents:
diff changeset
   149
        *   topics with SubscribeTopicL().
hgs
parents:
diff changeset
   150
        */
hgs
parents:
diff changeset
   151
        void ApplySubscriptionsL();
hgs
parents:
diff changeset
   152
  
hgs
parents:
diff changeset
   153
    private:    // Prohibited operators and functions
hgs
parents:
diff changeset
   154
hgs
parents:
diff changeset
   155
        // Copy constructor
hgs
parents:
diff changeset
   156
        CCbsMcnSession( const CCbsMcnSession& );
hgs
parents:
diff changeset
   157
hgs
parents:
diff changeset
   158
        // Assignment operator
hgs
parents:
diff changeset
   159
        CCbsMcnSession& operator=( const CCbsMcnSession& );
hgs
parents:
diff changeset
   160
hgs
parents:
diff changeset
   161
hgs
parents:
diff changeset
   162
    private:    // Data
hgs
parents:
diff changeset
   163
        
hgs
parents:
diff changeset
   164
        /// Receiver object.
hgs
parents:
diff changeset
   165
        CCbsRecEtel& iReceiver;
hgs
parents:
diff changeset
   166
hgs
parents:
diff changeset
   167
        /**
hgs
parents:
diff changeset
   168
        *   Indicates whether iMessage is a valid message; that is, there
hgs
parents:
diff changeset
   169
        *   is a pending notify request.
hgs
parents:
diff changeset
   170
        */
hgs
parents:
diff changeset
   171
        TBool iIsMessage;
hgs
parents:
diff changeset
   172
hgs
parents:
diff changeset
   173
        /// Message for the pending notify request 
hgs
parents:
diff changeset
   174
        RMessage2 iMessage;
hgs
parents:
diff changeset
   175
hgs
parents:
diff changeset
   176
        /// Array of topic numbers subscribed by the client.
hgs
parents:
diff changeset
   177
        CArrayFixFlat< TUint16 >* iSubscribedTopics;
hgs
parents:
diff changeset
   178
hgs
parents:
diff changeset
   179
        // MCN message
hgs
parents:
diff changeset
   180
        TCbsMcnMessage iMcnMessage;
hgs
parents:
diff changeset
   181
hgs
parents:
diff changeset
   182
        // MCN message package for IPC
hgs
parents:
diff changeset
   183
        TPckg<TCbsMcnMessage> iMcnPckg;
hgs
parents:
diff changeset
   184
hgs
parents:
diff changeset
   185
    };
hgs
parents:
diff changeset
   186
hgs
parents:
diff changeset
   187
#endif      //  CCBSMCNSESSION_H   
hgs
parents:
diff changeset
   188
            
hgs
parents:
diff changeset
   189
// End of File
hgs
parents:
diff changeset
   190
hgs
parents:
diff changeset
   191