ximpfw/presence/srcpresencecache/presencecacheserver/presencecachesession.h
author hgs
Wed, 03 Nov 2010 09:32:20 +0530
changeset 51 61fad867f68e
permissions -rw-r--r--
201041
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
51
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2007, 2008 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:  Header file for Presence Cache Server session
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
hgs
parents:
diff changeset
    19
#ifndef PRESENCECACHESESSION_H
hgs
parents:
diff changeset
    20
#define PRESENCECACHESESSION_H
hgs
parents:
diff changeset
    21
hgs
parents:
diff changeset
    22
// INCLUDE FILES
hgs
parents:
diff changeset
    23
#include <e32base.h>
hgs
parents:
diff changeset
    24
hgs
parents:
diff changeset
    25
#include "presencecachedefs.h"
hgs
parents:
diff changeset
    26
hgs
parents:
diff changeset
    27
/**
hgs
parents:
diff changeset
    28
 * Presence cache server session class.
hgs
parents:
diff changeset
    29
 * @ingroup ximpprescacheserver
hgs
parents:
diff changeset
    30
 * @since S60 v3.2
hgs
parents:
diff changeset
    31
 */
hgs
parents:
diff changeset
    32
// FORWARD DECLARATIONS
hgs
parents:
diff changeset
    33
class CPresenceCacheServer;
hgs
parents:
diff changeset
    34
class MPresenceInfo;
hgs
parents:
diff changeset
    35
class MPresenceBuddyInfo;
hgs
parents:
diff changeset
    36
class CPresenceBuddyInfoListImp;
hgs
parents:
diff changeset
    37
class CPresenceBuddyInfoImp;
hgs
parents:
diff changeset
    38
class CCacheSessionActiveHelper;
hgs
parents:
diff changeset
    39
class CPresenceCacheBuddyStore;
hgs
parents:
diff changeset
    40
hgs
parents:
diff changeset
    41
//Include Cache server namespace
hgs
parents:
diff changeset
    42
using namespace NCacheSrv;
hgs
parents:
diff changeset
    43
hgs
parents:
diff changeset
    44
class CPresenceCacheSession : public CSession2
hgs
parents:
diff changeset
    45
    {
hgs
parents:
diff changeset
    46
    friend class CCacheSessionActiveHelper;
hgs
parents:
diff changeset
    47
    public: // Constructors and destructors
hgs
parents:
diff changeset
    48
hgs
parents:
diff changeset
    49
        /**
hgs
parents:
diff changeset
    50
        * Two-phased constructor.
hgs
parents:
diff changeset
    51
        * @param aServer The server.
hgs
parents:
diff changeset
    52
        * @return Pointer to created CPresenceCacheSession object.
hgs
parents:
diff changeset
    53
        */
hgs
parents:
diff changeset
    54
        static CPresenceCacheSession* NewL( CPresenceCacheServer& aServer );
hgs
parents:
diff changeset
    55
hgs
parents:
diff changeset
    56
        /**
hgs
parents:
diff changeset
    57
        * Two-phased constructor.
hgs
parents:
diff changeset
    58
        * @param aServer The server.
hgs
parents:
diff changeset
    59
        * @return Pointer to created CPresenceCacheSession object.
hgs
parents:
diff changeset
    60
        */
hgs
parents:
diff changeset
    61
        static CPresenceCacheSession* NewLC( CPresenceCacheServer& aServer );
hgs
parents:
diff changeset
    62
hgs
parents:
diff changeset
    63
        /**
hgs
parents:
diff changeset
    64
        * ~CPresenceCacheSession.
hgs
parents:
diff changeset
    65
        * Destructor.
hgs
parents:
diff changeset
    66
        */
hgs
parents:
diff changeset
    67
        virtual ~CPresenceCacheSession();
hgs
parents:
diff changeset
    68
        
hgs
parents:
diff changeset
    69
    public: // Functions from base classes
hgs
parents:
diff changeset
    70
hgs
parents:
diff changeset
    71
        /**
hgs
parents:
diff changeset
    72
        * From CSession
hgs
parents:
diff changeset
    73
        */
hgs
parents:
diff changeset
    74
        void ServiceL( const RMessage2& aMessage );
hgs
parents:
diff changeset
    75
        
hgs
parents:
diff changeset
    76
    public: // own
hgs
parents:
diff changeset
    77
        
hgs
parents:
diff changeset
    78
        /**
hgs
parents:
diff changeset
    79
        * This is called by some other session to inform this session that given
hgs
parents:
diff changeset
    80
        * buddy's presence has been changed. The informing session first make
hgs
parents:
diff changeset
    81
        * sure that this session has subscribed for the changes in given buddy.
hgs
parents:
diff changeset
    82
        *
hgs
parents:
diff changeset
    83
        *@param pointer to CPresenceBuddyInfoImp, ownership doesnt transfer.
hgs
parents:
diff changeset
    84
        */
hgs
parents:
diff changeset
    85
        void NotifyPresenceChangeL(const CPresenceBuddyInfoImp* aPresenceBuddyInfo);    
hgs
parents:
diff changeset
    86
hgs
parents:
diff changeset
    87
    private: // Constructors and destructors
hgs
parents:
diff changeset
    88
hgs
parents:
diff changeset
    89
        /**
hgs
parents:
diff changeset
    90
        * C++ default constructor.
hgs
parents:
diff changeset
    91
        * @param aServer The server.
hgs
parents:
diff changeset
    92
        */
hgs
parents:
diff changeset
    93
        CPresenceCacheSession( CPresenceCacheServer& aServer );
hgs
parents:
diff changeset
    94
hgs
parents:
diff changeset
    95
        /**
hgs
parents:
diff changeset
    96
        * Construct.
hgs
parents:
diff changeset
    97
        * 2nd phase constructor
hgs
parents:
diff changeset
    98
        */
hgs
parents:
diff changeset
    99
        void ConstructL();
hgs
parents:
diff changeset
   100
hgs
parents:
diff changeset
   101
    private: // New methods
hgs
parents:
diff changeset
   102
hgs
parents:
diff changeset
   103
        /**
hgs
parents:
diff changeset
   104
        * Packs PresenceInfo object into a data packet.
hgs
parents:
diff changeset
   105
        * @param aPresInfo PresenceInfo object.
hgs
parents:
diff changeset
   106
        * @return HBufC* data packet.
hgs
parents:
diff changeset
   107
        */
hgs
parents:
diff changeset
   108
        HBufC8* PackPresenceInfoLC(const MPresenceInfo& aPresInfo);
hgs
parents:
diff changeset
   109
        
hgs
parents:
diff changeset
   110
        /**
hgs
parents:
diff changeset
   111
        * Cancels the async request, this is called by docancel of active helper
hgs
parents:
diff changeset
   112
        */
hgs
parents:
diff changeset
   113
        void Cancel();
hgs
parents:
diff changeset
   114
        
hgs
parents:
diff changeset
   115
        /**
hgs
parents:
diff changeset
   116
        * Tries writing given buddy to presence cache
hgs
parents:
diff changeset
   117
        * @param aBuddyPresInfo object to write.
hgs
parents:
diff changeset
   118
        * @return TInt error code
hgs
parents:
diff changeset
   119
        */
hgs
parents:
diff changeset
   120
        TInt TryWriteBuddyToCacheL(MPresenceBuddyInfo* aBuddyPresInfo);
hgs
parents:
diff changeset
   121
        
hgs
parents:
diff changeset
   122
        /**
hgs
parents:
diff changeset
   123
        * Packs services array
hgs
parents:
diff changeset
   124
        * 
hgs
parents:
diff changeset
   125
        * @param CArrayFixFlat aArray
hgs
parents:
diff changeset
   126
        * @return packed object
hgs
parents:
diff changeset
   127
        */
hgs
parents:
diff changeset
   128
        //HBufC8* PackServicesL(CArrayFixFlat<TUid>* aArray );
hgs
parents:
diff changeset
   129
        
hgs
parents:
diff changeset
   130
        /**
hgs
parents:
diff changeset
   131
        * Removes all subscriptions stored by this session in iSubscribedStores
hgs
parents:
diff changeset
   132
        */
hgs
parents:
diff changeset
   133
        void RemoveMySubscriptions();
hgs
parents:
diff changeset
   134
        
hgs
parents:
diff changeset
   135
        /**
hgs
parents:
diff changeset
   136
        * Notify to subscribers in given buddy store's presence change. This method
hgs
parents:
diff changeset
   137
        * goes through all subscribed sessions and call their NotifyPresenceChangeL
hgs
parents:
diff changeset
   138
        * methods. Ownership of store is not transferred.
hgs
parents:
diff changeset
   139
        * 
hgs
parents:
diff changeset
   140
        * @param aBuddyStore pointer to changed CPresenceCacheBuddyStore
hgs
parents:
diff changeset
   141
        */
hgs
parents:
diff changeset
   142
        void NotifyAllSubscribersL(CPresenceCacheBuddyStore* aBuddyStore);
hgs
parents:
diff changeset
   143
        
hgs
parents:
diff changeset
   144
        /**
hgs
parents:
diff changeset
   145
        * Pack buddy's presence info into descriptor.
hgs
parents:
diff changeset
   146
        * 
hgs
parents:
diff changeset
   147
        * @param aBuddyPresInfo buddy's presence info, ownership doesnt transfer
hgs
parents:
diff changeset
   148
        * @param HBufC8* packed presence info
hgs
parents:
diff changeset
   149
        */
hgs
parents:
diff changeset
   150
        HBufC8* PackBuddyPresenceInfoLC(
hgs
parents:
diff changeset
   151
                                    const CPresenceBuddyInfoImp* aBuddyPresInfo);
hgs
parents:
diff changeset
   152
        
hgs
parents:
diff changeset
   153
    
hgs
parents:
diff changeset
   154
     private: // New Massage processors, these are called to process messages.
hgs
parents:
diff changeset
   155
        void HandlePrepReadPresenceInfoSyncL(const RMessage2& aMessage );
hgs
parents:
diff changeset
   156
        
hgs
parents:
diff changeset
   157
        void HandleWritePresenceInfoSyncL(const RMessage2& aMessage ); 
hgs
parents:
diff changeset
   158
        
hgs
parents:
diff changeset
   159
        void HandleGetLastPreparedPacketL( const RMessage2& aMessage );
hgs
parents:
diff changeset
   160
        
hgs
parents:
diff changeset
   161
        void HandleGetLastPreparedAsyncPacketL( const RMessage2& aMessage );
hgs
parents:
diff changeset
   162
        
hgs
parents:
diff changeset
   163
        void HandleBuddyCountInAllServices(const RMessage2& aMessage ); 
hgs
parents:
diff changeset
   164
        
hgs
parents:
diff changeset
   165
        void HandleBuddyCountInService(const RMessage2& aMessage );
hgs
parents:
diff changeset
   166
        
hgs
parents:
diff changeset
   167
        void HandleWritePresenceInfoAsyncL(const RMessage2& aMessage );
hgs
parents:
diff changeset
   168
        
hgs
parents:
diff changeset
   169
        void HandlePrepReadAllBuddiesPresenceInService(const RMessage2& aMessage );
hgs
parents:
diff changeset
   170
        
hgs
parents:
diff changeset
   171
        //void HandleGetAllServicesL(const RMessage2& aMessage );
hgs
parents:
diff changeset
   172
        
hgs
parents:
diff changeset
   173
        void HandleGetServiceCount(const RMessage2& aMessage );
hgs
parents:
diff changeset
   174
        
hgs
parents:
diff changeset
   175
        void HandleDeleteService(const RMessage2& aMessage );
hgs
parents:
diff changeset
   176
        
hgs
parents:
diff changeset
   177
        void HandleCancel(const RMessage2& aMessage );
hgs
parents:
diff changeset
   178
        
hgs
parents:
diff changeset
   179
        void HandleDeletePresence(const RMessage2& aMessage );
hgs
parents:
diff changeset
   180
        
hgs
parents:
diff changeset
   181
        
hgs
parents:
diff changeset
   182
        // subscribe notification related
hgs
parents:
diff changeset
   183
        void HandleSubscribeBuddyPresenceChange(const RMessage2& aMessage );
hgs
parents:
diff changeset
   184
        
hgs
parents:
diff changeset
   185
        void HandleUnSubscribeBuddyPresenceChange(const RMessage2& aMessage );
hgs
parents:
diff changeset
   186
        
hgs
parents:
diff changeset
   187
        void HandleGetLastNotifiedtPacketL(const RMessage2& aMessage );
hgs
parents:
diff changeset
   188
        
hgs
parents:
diff changeset
   189
        void HandleWaitingForNotification(const RMessage2& aMessage );
hgs
parents:
diff changeset
   190
        
hgs
parents:
diff changeset
   191
        void HandleCancelWaitingForNotification(const RMessage2& aMessage );
hgs
parents:
diff changeset
   192
        
hgs
parents:
diff changeset
   193
    
hgs
parents:
diff changeset
   194
    private:            
hgs
parents:
diff changeset
   195
        
hgs
parents:
diff changeset
   196
        /**
hgs
parents:
diff changeset
   197
        * Writes Presence info async. to cache, its called on each runl cycle
hgs
parents:
diff changeset
   198
        * and it takes data to write from member data holders.
hgs
parents:
diff changeset
   199
        */
hgs
parents:
diff changeset
   200
        void WritePresenceInfoAsyncL();
hgs
parents:
diff changeset
   201
        
hgs
parents:
diff changeset
   202
        /**
hgs
parents:
diff changeset
   203
        * Reads all buddies presence info in given service. It takes data from 
hgs
parents:
diff changeset
   204
        * stored message.
hgs
parents:
diff changeset
   205
        */
hgs
parents:
diff changeset
   206
        void ReadAllBuddiesPresenceInServiceL();
hgs
parents:
diff changeset
   207
        
hgs
parents:
diff changeset
   208
        /**
hgs
parents:
diff changeset
   209
         * Get Service name from given xsp id
hgs
parents:
diff changeset
   210
         * 
hgs
parents:
diff changeset
   211
         * @param aXspId xsp id e.g. ovi:xyz@nokia.com
hgs
parents:
diff changeset
   212
         * @return ServiceName returned here
hgs
parents:
diff changeset
   213
         */
hgs
parents:
diff changeset
   214
        TPtrC GetServiceName(const TDesC& aXspId);
hgs
parents:
diff changeset
   215
        
hgs
parents:
diff changeset
   216
        
hgs
parents:
diff changeset
   217
    private: // Data
hgs
parents:
diff changeset
   218
hgs
parents:
diff changeset
   219
        /**
hgs
parents:
diff changeset
   220
        * iMessage, the message exchange data with the server.
hgs
parents:
diff changeset
   221
        */
hgs
parents:
diff changeset
   222
        RMessage2 iMessage;
hgs
parents:
diff changeset
   223
        
hgs
parents:
diff changeset
   224
        /**
hgs
parents:
diff changeset
   225
        * iMessage, the message holder for notification wating.
hgs
parents:
diff changeset
   226
        * This is always pending when some client subscribe for notifications.
hgs
parents:
diff changeset
   227
        */
hgs
parents:
diff changeset
   228
        RMessage2 iMessageForNoti;
hgs
parents:
diff changeset
   229
hgs
parents:
diff changeset
   230
        /**
hgs
parents:
diff changeset
   231
        * iServer, reference to the server.
hgs
parents:
diff changeset
   232
        */
hgs
parents:
diff changeset
   233
        CPresenceCacheServer& iServer;
hgs
parents:
diff changeset
   234
        
hgs
parents:
diff changeset
   235
        /**
hgs
parents:
diff changeset
   236
        * Own: used for sync messages
hgs
parents:
diff changeset
   237
        */
hgs
parents:
diff changeset
   238
        HBufC8* iDataPack;
hgs
parents:
diff changeset
   239
        
hgs
parents:
diff changeset
   240
        /**
hgs
parents:
diff changeset
   241
        * Own: used for async messages
hgs
parents:
diff changeset
   242
        */
hgs
parents:
diff changeset
   243
        HBufC8* iDataPackAsync;
hgs
parents:
diff changeset
   244
        
hgs
parents:
diff changeset
   245
        /**
hgs
parents:
diff changeset
   246
        * Own: used for subscribe notify message
hgs
parents:
diff changeset
   247
        */
hgs
parents:
diff changeset
   248
        HBufC8* iDataPackNotifier;
hgs
parents:
diff changeset
   249
        
hgs
parents:
diff changeset
   250
        /**
hgs
parents:
diff changeset
   251
        * Own: used for ansync requests
hgs
parents:
diff changeset
   252
        */
hgs
parents:
diff changeset
   253
        NRequest::TOpAsyncCodes iAsyncReq;
hgs
parents:
diff changeset
   254
        
hgs
parents:
diff changeset
   255
        /**
hgs
parents:
diff changeset
   256
        *Own
hgs
parents:
diff changeset
   257
        */
hgs
parents:
diff changeset
   258
        CPresenceBuddyInfoListImp* iBuddypresInfoList;
hgs
parents:
diff changeset
   259
        
hgs
parents:
diff changeset
   260
        /**
hgs
parents:
diff changeset
   261
        *
hgs
parents:
diff changeset
   262
        */
hgs
parents:
diff changeset
   263
        TInt iLastServiceCount;
hgs
parents:
diff changeset
   264
        
hgs
parents:
diff changeset
   265
        
hgs
parents:
diff changeset
   266
        /**
hgs
parents:
diff changeset
   267
        *Own
hgs
parents:
diff changeset
   268
        */
hgs
parents:
diff changeset
   269
        CCacheSessionActiveHelper* iActiveHelper;
hgs
parents:
diff changeset
   270
        
hgs
parents:
diff changeset
   271
        /**
hgs
parents:
diff changeset
   272
        * Pointers not owned.
hgs
parents:
diff changeset
   273
        */
hgs
parents:
diff changeset
   274
        RPointerArray<CPresenceCacheBuddyStore> iSubscribedStores;
hgs
parents:
diff changeset
   275
        
hgs
parents:
diff changeset
   276
    };
hgs
parents:
diff changeset
   277
hgs
parents:
diff changeset
   278
/**
hgs
parents:
diff changeset
   279
* This class is used by CPresenceCacheSession for dividing long running async.
hgs
parents:
diff changeset
   280
* tasks into smaller units. The CPresenceCacheSession itself was not made 
hgs
parents:
diff changeset
   281
* active, since that results in c++ ambiguousness problems in CPresenceCacheSession
hgs
parents:
diff changeset
   282
* because of inheriting twice from CBase.
hgs
parents:
diff changeset
   283
*  
hgs
parents:
diff changeset
   284
* @since S60 v3.2
hgs
parents:
diff changeset
   285
*/    
hgs
parents:
diff changeset
   286
class CCacheSessionActiveHelper : public CActive
hgs
parents:
diff changeset
   287
	{
hgs
parents:
diff changeset
   288
	public: // public functions
hgs
parents:
diff changeset
   289
	
hgs
parents:
diff changeset
   290
	    /**
hgs
parents:
diff changeset
   291
        * Default 1st phase factory method.
hgs
parents:
diff changeset
   292
        * Creates an instance of CCacheSessionActiveHelper
hgs
parents:
diff changeset
   293
        *
hgs
parents:
diff changeset
   294
        * @return created instance of the CCacheSessionActiveHelper
hgs
parents:
diff changeset
   295
        */
hgs
parents:
diff changeset
   296
        static CCacheSessionActiveHelper* NewL(CPresenceCacheSession* aSession );
hgs
parents:
diff changeset
   297
        
hgs
parents:
diff changeset
   298
        /**
hgs
parents:
diff changeset
   299
        * Destructor
hgs
parents:
diff changeset
   300
        */
hgs
parents:
diff changeset
   301
        ~CCacheSessionActiveHelper( );
hgs
parents:
diff changeset
   302
        
hgs
parents:
diff changeset
   303
        /**
hgs
parents:
diff changeset
   304
        * Active object start
hgs
parents:
diff changeset
   305
        */
hgs
parents:
diff changeset
   306
		void Start();
hgs
parents:
diff changeset
   307
	
hgs
parents:
diff changeset
   308
	private: // private functions
hgs
parents:
diff changeset
   309
        
hgs
parents:
diff changeset
   310
        /**
hgs
parents:
diff changeset
   311
        * Constructor
hgs
parents:
diff changeset
   312
        */
hgs
parents:
diff changeset
   313
        CCacheSessionActiveHelper(CPresenceCacheSession* aSession);
hgs
parents:
diff changeset
   314
hgs
parents:
diff changeset
   315
        /**
hgs
parents:
diff changeset
   316
        * Active object RunL
hgs
parents:
diff changeset
   317
        */
hgs
parents:
diff changeset
   318
		void RunL();
hgs
parents:
diff changeset
   319
		
hgs
parents:
diff changeset
   320
        /**
hgs
parents:
diff changeset
   321
        * Active object DoCancel
hgs
parents:
diff changeset
   322
        */
hgs
parents:
diff changeset
   323
		void DoCancel();
hgs
parents:
diff changeset
   324
		
hgs
parents:
diff changeset
   325
        /**
hgs
parents:
diff changeset
   326
        * ConstructL
hgs
parents:
diff changeset
   327
        */
hgs
parents:
diff changeset
   328
		void ConstructL();
hgs
parents:
diff changeset
   329
		
hgs
parents:
diff changeset
   330
		
hgs
parents:
diff changeset
   331
        /**
hgs
parents:
diff changeset
   332
        * pointer to CPresenceCacheSession doesnt own
hgs
parents:
diff changeset
   333
        */
hgs
parents:
diff changeset
   334
		CPresenceCacheSession* iCacheSession;
hgs
parents:
diff changeset
   335
			
hgs
parents:
diff changeset
   336
	};
hgs
parents:
diff changeset
   337
    
hgs
parents:
diff changeset
   338
#endif // PRESENCECACHESESSION_H
hgs
parents:
diff changeset
   339
hgs
parents:
diff changeset
   340
// End of File
hgs
parents:
diff changeset
   341