keepalive/flextimer/server/inc/flextimersession.h
author hgs
Mon, 24 May 2010 20:51:35 +0300
changeset 32 5c4486441ae6
permissions -rw-r--r--
201021
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
32
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
 * Copyright (c) 2010 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:
hgs
parents:
diff changeset
    15
 * Class definition for Flexible timer server side sessions. Session
hgs
parents:
diff changeset
    16
 * instances handle the commmunication with clients and implement a 
hgs
parents:
diff changeset
    17
 * callback interface for the CFlexTimerEngine to fire timers
hgs
parents:
diff changeset
    18
 *
hgs
parents:
diff changeset
    19
 */
hgs
parents:
diff changeset
    20
/*
hgs
parents:
diff changeset
    21
 * %version: 1 %
hgs
parents:
diff changeset
    22
 */
hgs
parents:
diff changeset
    23
// Protection against nested includes
hgs
parents:
diff changeset
    24
#ifndef FLEXTIMERSESSION_H
hgs
parents:
diff changeset
    25
#define FLEXTIMERSESSION_H
hgs
parents:
diff changeset
    26
hgs
parents:
diff changeset
    27
// System includes
hgs
parents:
diff changeset
    28
#include <e32base.h>
hgs
parents:
diff changeset
    29
hgs
parents:
diff changeset
    30
// User includes
hgs
parents:
diff changeset
    31
#include "mflextimerservicecb.h"
hgs
parents:
diff changeset
    32
hgs
parents:
diff changeset
    33
// Forward declarations
hgs
parents:
diff changeset
    34
class MFlexTimerService;
hgs
parents:
diff changeset
    35
hgs
parents:
diff changeset
    36
// Class declaration
hgs
parents:
diff changeset
    37
/**
hgs
parents:
diff changeset
    38
 *  Flexible timer server side session
hgs
parents:
diff changeset
    39
 *  CFlexTimerSession implements sessions in CFlexTimerServer. A sessions
hgs
parents:
diff changeset
    40
 *  parses client messages and adds/cancels timers to CFlexTimerEngine. The
hgs
parents:
diff changeset
    41
 *  expiration of the timer completes client side message.
hgs
parents:
diff changeset
    42
 */
hgs
parents:
diff changeset
    43
class CFlexTimerSession : public CSession2, public MFlexTimerServiceCB
hgs
parents:
diff changeset
    44
    {
hgs
parents:
diff changeset
    45
hgs
parents:
diff changeset
    46
public:
hgs
parents:
diff changeset
    47
hgs
parents:
diff changeset
    48
    /**
hgs
parents:
diff changeset
    49
     * Constructor
hgs
parents:
diff changeset
    50
     * 
hgs
parents:
diff changeset
    51
     * @param aFlexTimerService A pointer to engine interface providing
hgs
parents:
diff changeset
    52
     *                          timeout service
hgs
parents:
diff changeset
    53
     */
hgs
parents:
diff changeset
    54
    CFlexTimerSession( MFlexTimerService* aFlexTimerService );
hgs
parents:
diff changeset
    55
hgs
parents:
diff changeset
    56
    /**
hgs
parents:
diff changeset
    57
     * Destructor
hgs
parents:
diff changeset
    58
     */
hgs
parents:
diff changeset
    59
    virtual ~CFlexTimerSession();
hgs
parents:
diff changeset
    60
hgs
parents:
diff changeset
    61
    /**
hgs
parents:
diff changeset
    62
     * From: CSession2
hgs
parents:
diff changeset
    63
     * Message handler servicing client requests. Interprets message type and
hgs
parents:
diff changeset
    64
     * passes it to correct function for processing.
hgs
parents:
diff changeset
    65
     * 
hgs
parents:
diff changeset
    66
     * @param aMessage Message from client
hgs
parents:
diff changeset
    67
     */
hgs
parents:
diff changeset
    68
    void ServiceL( const RMessage2& aMessage );
hgs
parents:
diff changeset
    69
hgs
parents:
diff changeset
    70
    /**
hgs
parents:
diff changeset
    71
     * From CSession2
hgs
parents:
diff changeset
    72
     * Called by a server when it receives a disconnect message for the 
hgs
parents:
diff changeset
    73
     * session.
hgs
parents:
diff changeset
    74
     * 
hgs
parents:
diff changeset
    75
     * @param aMessage The disconnect message
hgs
parents:
diff changeset
    76
     */
hgs
parents:
diff changeset
    77
    void Disconnect( const RMessage2 &aMessage );
hgs
parents:
diff changeset
    78
    
hgs
parents:
diff changeset
    79
    /**
hgs
parents:
diff changeset
    80
     * From: MFlexTimerServiceCB
hgs
parents:
diff changeset
    81
     * Timeout callback function called by timeout engine when a timer
hgs
parents:
diff changeset
    82
     * associated to this session expires.
hgs
parents:
diff changeset
    83
     * 
hgs
parents:
diff changeset
    84
     * @see MFlexTimerServiceCB
hgs
parents:
diff changeset
    85
     */
hgs
parents:
diff changeset
    86
    virtual void Timeout() const;
hgs
parents:
diff changeset
    87
hgs
parents:
diff changeset
    88
    /**
hgs
parents:
diff changeset
    89
     * From: MFlexTimerServiceCB
hgs
parents:
diff changeset
    90
     * Callback function called by CFlexTimerEngine, when a timer associated
hgs
parents:
diff changeset
    91
     * to this session is aborted. Most probable cause for this is At()-timer
hgs
parents:
diff changeset
    92
     * aborting due to the system time change
hgs
parents:
diff changeset
    93
     * 
hgs
parents:
diff changeset
    94
     * @param aReason Error code to be passed for client (KErrAbort in case 
hgs
parents:
diff changeset
    95
     *                of system time change)
hgs
parents:
diff changeset
    96
     *                
hgs
parents:
diff changeset
    97
     * @see MFlexTimerServiceCB
hgs
parents:
diff changeset
    98
     */
hgs
parents:
diff changeset
    99
    virtual void Abort( TInt aReason ) const;
hgs
parents:
diff changeset
   100
hgs
parents:
diff changeset
   101
private:
hgs
parents:
diff changeset
   102
hgs
parents:
diff changeset
   103
    /**
hgs
parents:
diff changeset
   104
     * Handles client messages that are issued using At()-function in
hgs
parents:
diff changeset
   105
     * RFlexTimer
hgs
parents:
diff changeset
   106
     * 
hgs
parents:
diff changeset
   107
     * @param aMessage Message from client
hgs
parents:
diff changeset
   108
     *
hgs
parents:
diff changeset
   109
     * @see RFlexTimer
hgs
parents:
diff changeset
   110
     */
hgs
parents:
diff changeset
   111
    void NewAtTimer( const RMessage2& aMessage );
hgs
parents:
diff changeset
   112
hgs
parents:
diff changeset
   113
    /**
hgs
parents:
diff changeset
   114
     * Handles client messages that are issued using AtUTC()-function in
hgs
parents:
diff changeset
   115
     * RFlexTimer
hgs
parents:
diff changeset
   116
     * 
hgs
parents:
diff changeset
   117
     * @param aMessage Message from client
hgs
parents:
diff changeset
   118
     *
hgs
parents:
diff changeset
   119
     * @see RFlexTimer
hgs
parents:
diff changeset
   120
     */
hgs
parents:
diff changeset
   121
    void NewAtUtcTimer( const RMessage2& aMessage );
hgs
parents:
diff changeset
   122
hgs
parents:
diff changeset
   123
    /**
hgs
parents:
diff changeset
   124
     * Handles client messages that a issued using After()-function in
hgs
parents:
diff changeset
   125
     * RFlexTimer
hgs
parents:
diff changeset
   126
     * 
hgs
parents:
diff changeset
   127
     * @param aMessage Message from client
hgs
parents:
diff changeset
   128
     * 
hgs
parents:
diff changeset
   129
     * @see RFlexTimer
hgs
parents:
diff changeset
   130
     */
hgs
parents:
diff changeset
   131
    void NewAfterTimer( const RMessage2& aMessage );
hgs
parents:
diff changeset
   132
hgs
parents:
diff changeset
   133
    /**
hgs
parents:
diff changeset
   134
     * Handles client messages that a issued using AfterTicks()-function in
hgs
parents:
diff changeset
   135
     * RFlexTimer
hgs
parents:
diff changeset
   136
     * 
hgs
parents:
diff changeset
   137
     * @param aMessage Message from client
hgs
parents:
diff changeset
   138
     * 
hgs
parents:
diff changeset
   139
     * @see RFlexTimer
hgs
parents:
diff changeset
   140
     */
hgs
parents:
diff changeset
   141
    void NewAfterTicksTimer( const RMessage2& aMessage );
hgs
parents:
diff changeset
   142
hgs
parents:
diff changeset
   143
    /**
hgs
parents:
diff changeset
   144
     * Handles timer cancellation initiated by client via RFlexTimer::Cancel
hgs
parents:
diff changeset
   145
     * 
hgs
parents:
diff changeset
   146
     * @param aMessage Message from client
hgs
parents:
diff changeset
   147
     * 
hgs
parents:
diff changeset
   148
     * @see RFlexTimer
hgs
parents:
diff changeset
   149
     */
hgs
parents:
diff changeset
   150
    void CancelTimer( const RMessage2& aMessage );
hgs
parents:
diff changeset
   151
hgs
parents:
diff changeset
   152
    /**
hgs
parents:
diff changeset
   153
     * Configuration message handler, stores configuration parameters for
hgs
parents:
diff changeset
   154
     * this session
hgs
parents:
diff changeset
   155
     * 
hgs
parents:
diff changeset
   156
     * @param aMessage Message from client
hgs
parents:
diff changeset
   157
     * 
hgs
parents:
diff changeset
   158
     * @see RFlexTimer
hgs
parents:
diff changeset
   159
     */
hgs
parents:
diff changeset
   160
    void ConfigureParameters( const RMessage2& aMessage );
hgs
parents:
diff changeset
   161
hgs
parents:
diff changeset
   162
    /**
hgs
parents:
diff changeset
   163
     * Inline function for calculating the period from current time to
hgs
parents:
diff changeset
   164
     * the timestamp given in message parameters. This is used for
hgs
parents:
diff changeset
   165
     * converting the timestamp given in At()- and AtUtc() -functions
hgs
parents:
diff changeset
   166
     * to an interval given to DoAddTimer function.
hgs
parents:
diff changeset
   167
     * 
hgs
parents:
diff changeset
   168
     * @param aRefTime  Reference time used as a basis for interval
hgs
parents:
diff changeset
   169
     *                  calculation (interval = timestamp - aRefTime)
hgs
parents:
diff changeset
   170
     * @param aMessage  Message containing timestamp in Int0 and Int1
hgs
parents:
diff changeset
   171
     *                  parameters (Int0 contains LSW)
hgs
parents:
diff changeset
   172
     * @param aInterval On return, contains the interval in microseconds
hgs
parents:
diff changeset
   173
     */
hgs
parents:
diff changeset
   174
    inline void GetIntervalToMsgTime( const RMessage2& aMessage,
hgs
parents:
diff changeset
   175
                                      TTime& aRefTime,
hgs
parents:
diff changeset
   176
                                      TTimeIntervalMicroSeconds& aInterval );
hgs
parents:
diff changeset
   177
    
hgs
parents:
diff changeset
   178
    /**
hgs
parents:
diff changeset
   179
     * Function for adding timer with desired window to engine, called in
hgs
parents:
diff changeset
   180
     * AtXxx() and AfterXxx() -functions
hgs
parents:
diff changeset
   181
     * 
hgs
parents:
diff changeset
   182
     * @param aMessage      Message from client. Stored if adding a timer is
hgs
parents:
diff changeset
   183
     *                      successful, completed if adding fails
hgs
parents:
diff changeset
   184
     * @param aInterval     Microseconds until to requested end time
hgs
parents:
diff changeset
   185
     * @param aRequestAbort ETrue if timer should be cancelled on system
hgs
parents:
diff changeset
   186
     *                      time change, EFalse otherwise
hgs
parents:
diff changeset
   187
     */
hgs
parents:
diff changeset
   188
    void DoAddTimer( const RMessage2& aMessage,
hgs
parents:
diff changeset
   189
                     TTimeIntervalMicroSeconds& aInterval,
hgs
parents:
diff changeset
   190
                     TBool aRequestAbort );
hgs
parents:
diff changeset
   191
hgs
parents:
diff changeset
   192
private:
hgs
parents:
diff changeset
   193
hgs
parents:
diff changeset
   194
    /**
hgs
parents:
diff changeset
   195
     * Pointer to engine interface through which new timers can be added
hgs
parents:
diff changeset
   196
     * and cancelled.
hgs
parents:
diff changeset
   197
     */
hgs
parents:
diff changeset
   198
    MFlexTimerService* iService;
hgs
parents:
diff changeset
   199
hgs
parents:
diff changeset
   200
    /**
hgs
parents:
diff changeset
   201
     * Timeout window size in microseconds (64-bit). Timeout window is
hgs
parents:
diff changeset
   202
     * calculated backwards from the absolute timestamp given in AtXxx()
hgs
parents:
diff changeset
   203
     * and AfterXxx() -functions
hgs
parents:
diff changeset
   204
     */
hgs
parents:
diff changeset
   205
    TTimeIntervalMicroSeconds iTimerWinSize;
hgs
parents:
diff changeset
   206
hgs
parents:
diff changeset
   207
    /**
hgs
parents:
diff changeset
   208
     * ETrue if client has not set timeout window, EFalse otherwise
hgs
parents:
diff changeset
   209
     */
hgs
parents:
diff changeset
   210
    TBool iUseDefaultWin;
hgs
parents:
diff changeset
   211
hgs
parents:
diff changeset
   212
    /**
hgs
parents:
diff changeset
   213
     * Handle to pending timeout message
hgs
parents:
diff changeset
   214
     */
hgs
parents:
diff changeset
   215
    RMessagePtr2 iPendingTimeoutMsg;
hgs
parents:
diff changeset
   216
    };
hgs
parents:
diff changeset
   217
hgs
parents:
diff changeset
   218
#include "flextimersession.inl"
hgs
parents:
diff changeset
   219
hgs
parents:
diff changeset
   220
#endif /* FLEXTIMERSESSION_H */