satengine/satserver/Engine/src/csatsactivewrapper.cpp
author hgs
Fri, 17 Sep 2010 17:09:13 +0300
changeset 48 78df25012fda
parent 33 8d5d7fcf9b59
permissions -rw-r--r--
201037
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
33
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2002-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:  Active object wrapper for SAT Server
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
#include    "csatsactivewrapper.h"
hgs
parents:
diff changeset
    20
#include    "SatLog.h"
hgs
parents:
diff changeset
    21
hgs
parents:
diff changeset
    22
const TInt KShortWait = 200; // 200 microseconds
hgs
parents:
diff changeset
    23
const TInt KWaitTimes = 5;   // Number of retries
hgs
parents:
diff changeset
    24
hgs
parents:
diff changeset
    25
// ================= MEMBER FUNCTIONS ==========================================
hgs
parents:
diff changeset
    26
hgs
parents:
diff changeset
    27
// Class constructor.
hgs
parents:
diff changeset
    28
CSatSActiveWrapper::CSatSActiveWrapper() :
hgs
parents:
diff changeset
    29
    CActive( EPriorityStandard )
hgs
parents:
diff changeset
    30
    {
hgs
parents:
diff changeset
    31
    LOG( SIMPLE, "SATENGINE: CSatSActiveWrapper::CSatSActiveWrapper \
hgs
parents:
diff changeset
    32
    calling-exiting" )
hgs
parents:
diff changeset
    33
    CActiveScheduler::Add( this );
hgs
parents:
diff changeset
    34
    }
hgs
parents:
diff changeset
    35
hgs
parents:
diff changeset
    36
// Destructor
hgs
parents:
diff changeset
    37
CSatSActiveWrapper::~CSatSActiveWrapper()
hgs
parents:
diff changeset
    38
    {
hgs
parents:
diff changeset
    39
    LOG( SIMPLE, "SATENGINE: CSatSActiveWrapper::~CSatSActiveWrapper calling" )
hgs
parents:
diff changeset
    40
hgs
parents:
diff changeset
    41
    if ( iTimer )
hgs
parents:
diff changeset
    42
        {
hgs
parents:
diff changeset
    43
        iTimer->Cancel();
hgs
parents:
diff changeset
    44
        delete iTimer;
hgs
parents:
diff changeset
    45
        }
hgs
parents:
diff changeset
    46
hgs
parents:
diff changeset
    47
    LOG( SIMPLE, "SATENGINE: CSatSActiveWrapper::~CSatSActiveWrapper exiting" )
hgs
parents:
diff changeset
    48
    }
hgs
parents:
diff changeset
    49
hgs
parents:
diff changeset
    50
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    51
// CSatSActiveWrapper::RequestStatus
hgs
parents:
diff changeset
    52
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    53
//
hgs
parents:
diff changeset
    54
TRequestStatus& CSatSActiveWrapper::RequestStatus()
hgs
parents:
diff changeset
    55
    {
hgs
parents:
diff changeset
    56
    LOG( DETAILED, "SATENGINE: CSatSActiveWrapper::RequestStatus calling" )
hgs
parents:
diff changeset
    57
hgs
parents:
diff changeset
    58
    TInt retries( 0 );
hgs
parents:
diff changeset
    59
    while ( IsActive() && ( retries++ < KWaitTimes ) )
hgs
parents:
diff changeset
    60
        {
hgs
parents:
diff changeset
    61
        // If this wrapper is already active, wait little bit
hgs
parents:
diff changeset
    62
        After( KShortWait );
hgs
parents:
diff changeset
    63
        }
hgs
parents:
diff changeset
    64
    LOG2( DETAILED, "SATENGINE: CSatSActiveWrapper::RequestStatus retries: %d",
hgs
parents:
diff changeset
    65
          retries )
hgs
parents:
diff changeset
    66
    // Double check. If still active, cancel
hgs
parents:
diff changeset
    67
    if ( IsActive() )
hgs
parents:
diff changeset
    68
        {
hgs
parents:
diff changeset
    69
        LOG( SIMPLE, "SATENGINE: CSatSActiveWrapper::RequestStatus active" )
hgs
parents:
diff changeset
    70
        CancelWrapper();
hgs
parents:
diff changeset
    71
        }
hgs
parents:
diff changeset
    72
hgs
parents:
diff changeset
    73
    LOG( DETAILED, "SATENGINE: CSatSActiveWrapper::RequestStatus exiting" )
hgs
parents:
diff changeset
    74
    return iStatus;
hgs
parents:
diff changeset
    75
    }
hgs
parents:
diff changeset
    76
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    77
// CSatSActiveWrapper::SetActiveAndWait
hgs
parents:
diff changeset
    78
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    79
//
hgs
parents:
diff changeset
    80
TInt CSatSActiveWrapper::SetActiveAndWait()
hgs
parents:
diff changeset
    81
    {
hgs
parents:
diff changeset
    82
    LOG( DETAILED, "SATENGINE: CSatSActiveWrapper::SetActiveAndWait calling" )
hgs
parents:
diff changeset
    83
hgs
parents:
diff changeset
    84
    TInt returnValue( KErrInUse );
hgs
parents:
diff changeset
    85
    if ( !IsActive() && !iWait.IsStarted() )
hgs
parents:
diff changeset
    86
        {
hgs
parents:
diff changeset
    87
        LOG( DETAILED,
hgs
parents:
diff changeset
    88
        "SATENGINE: CSatSActiveWrapper::SetActiveAndWait setActiveAndWait" )
hgs
parents:
diff changeset
    89
        SetActive();
hgs
parents:
diff changeset
    90
        iWait.Start(); // Blocks until request is complete or cancelled
hgs
parents:
diff changeset
    91
        returnValue = iStatus.Int();
hgs
parents:
diff changeset
    92
        }
hgs
parents:
diff changeset
    93
hgs
parents:
diff changeset
    94
    LOG( DETAILED, "SATENGINE: CSatSActiveWrapper::SetActiveAndWait exiting" )
hgs
parents:
diff changeset
    95
    return returnValue;
hgs
parents:
diff changeset
    96
    }
hgs
parents:
diff changeset
    97
hgs
parents:
diff changeset
    98
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    99
// CSatSActiveWrapper::After
hgs
parents:
diff changeset
   100
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   101
void CSatSActiveWrapper::After(
hgs
parents:
diff changeset
   102
    const TTimeIntervalMicroSeconds32& aDelay,
hgs
parents:
diff changeset
   103
    const TTimeIntervalMicroSeconds32& aInterval )
hgs
parents:
diff changeset
   104
    {
hgs
parents:
diff changeset
   105
    LOG( SIMPLE, "SATENGINE: CSatSActiveWrapper::After calling" )
hgs
parents:
diff changeset
   106
hgs
parents:
diff changeset
   107
    if ( !iAfterWait.IsStarted() )
hgs
parents:
diff changeset
   108
        {
hgs
parents:
diff changeset
   109
        LOG( SIMPLE, "SATENGINE: CSatSActiveWrapper::After start iAfterWait" )
hgs
parents:
diff changeset
   110
        TRAP_IGNORE( ( iTimer = CPeriodic::NewL( EPriorityStandard ) ) )
hgs
parents:
diff changeset
   111
        iTimer->Start( aDelay, aInterval, TCallBack( DelayCallBack, this ) );
hgs
parents:
diff changeset
   112
        iAfterWait.Start();
hgs
parents:
diff changeset
   113
hgs
parents:
diff changeset
   114
        delete iTimer;
hgs
parents:
diff changeset
   115
        iTimer = NULL;
hgs
parents:
diff changeset
   116
        }
hgs
parents:
diff changeset
   117
hgs
parents:
diff changeset
   118
    LOG( SIMPLE, "SATENGINE: CSatSActiveWrapper::After exiting" )
hgs
parents:
diff changeset
   119
    }
hgs
parents:
diff changeset
   120
hgs
parents:
diff changeset
   121
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   122
// CSatSActiveWrapper::DelayCallBack
hgs
parents:
diff changeset
   123
// Timer call back function
hgs
parents:
diff changeset
   124
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   125
TInt CSatSActiveWrapper::DelayCallBack( TAny* aPtr )
hgs
parents:
diff changeset
   126
    {
hgs
parents:
diff changeset
   127
    LOG( SIMPLE, "SATENGINE: CSatSActiveWrapper::DelayCallBack calling" )
hgs
parents:
diff changeset
   128
    CSatSActiveWrapper* ptrThis = static_cast<CSatSActiveWrapper*>( aPtr );
hgs
parents:
diff changeset
   129
    if ( ptrThis && ( ptrThis->iAfterWait.IsStarted() ) )
hgs
parents:
diff changeset
   130
        {
hgs
parents:
diff changeset
   131
        LOG( SIMPLE, "SATENGINE: CSatSActiveWrapper::DelayCallBack stop \
hgs
parents:
diff changeset
   132
             iAfterWait" )
hgs
parents:
diff changeset
   133
        ptrThis->iAfterWait.AsyncStop();
hgs
parents:
diff changeset
   134
        }
hgs
parents:
diff changeset
   135
    LOG( SIMPLE, "SATENGINE: CSatSActiveWrapper::DelayCallBack exiting" )
hgs
parents:
diff changeset
   136
    return ( EFalse );
hgs
parents:
diff changeset
   137
    }
hgs
parents:
diff changeset
   138
hgs
parents:
diff changeset
   139
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   140
// CSatSActiveWrapper::AddSubSessionL
hgs
parents:
diff changeset
   141
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   142
void CSatSActiveWrapper::CancelWrapper()
hgs
parents:
diff changeset
   143
    {
hgs
parents:
diff changeset
   144
    LOG( SIMPLE, "SATENGINE: CSatSActiveWrapper::CancelWrapper calling" )
hgs
parents:
diff changeset
   145
hgs
parents:
diff changeset
   146
    // If pending for request, cancel active
hgs
parents:
diff changeset
   147
    if ( IsActive() )
hgs
parents:
diff changeset
   148
        {
hgs
parents:
diff changeset
   149
        LOG( SIMPLE, 
hgs
parents:
diff changeset
   150
        "SATENGINE: CSatSActiveWrapper::CancelWrapper cancel iWait" )
hgs
parents:
diff changeset
   151
        // Calls DoCancel which cancels iWait
hgs
parents:
diff changeset
   152
        Cancel();
hgs
parents:
diff changeset
   153
        }
hgs
parents:
diff changeset
   154
    else if ( iAfterWait.IsStarted() )
hgs
parents:
diff changeset
   155
        {
hgs
parents:
diff changeset
   156
        LOG( SIMPLE, 
hgs
parents:
diff changeset
   157
        "SATENGINE: CSatSActiveWrapper::CancelWrapper cancel timer" )
hgs
parents:
diff changeset
   158
        // Cancels timer
hgs
parents:
diff changeset
   159
        iAfterWait.AsyncStop();
hgs
parents:
diff changeset
   160
        }
hgs
parents:
diff changeset
   161
    else
hgs
parents:
diff changeset
   162
        {
hgs
parents:
diff changeset
   163
        LOG( SIMPLE, 
hgs
parents:
diff changeset
   164
        "SATENGINE: CSatSActiveWrapper::CancelWrapper Wrapper not active" )
hgs
parents:
diff changeset
   165
        }
hgs
parents:
diff changeset
   166
hgs
parents:
diff changeset
   167
    LOG( SIMPLE, "SATENGINE: CSatSActiveWrapper::CancelWrapper exiting" )
hgs
parents:
diff changeset
   168
    }
hgs
parents:
diff changeset
   169
hgs
parents:
diff changeset
   170
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   171
// CSatSActiveWrapper::Release
hgs
parents:
diff changeset
   172
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   173
void CSatSActiveWrapper::Release()
hgs
parents:
diff changeset
   174
    {
hgs
parents:
diff changeset
   175
    LOG( SIMPLE, "SATENGINE: CSatSActiveWrapper::Release calling-exiting" )
hgs
parents:
diff changeset
   176
    delete this;
hgs
parents:
diff changeset
   177
    }
hgs
parents:
diff changeset
   178
hgs
parents:
diff changeset
   179
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   180
// CSatSActiveWrapper::RunL
hgs
parents:
diff changeset
   181
// Synchronous request complete
hgs
parents:
diff changeset
   182
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   183
//
hgs
parents:
diff changeset
   184
void CSatSActiveWrapper::RunL()
hgs
parents:
diff changeset
   185
    {
hgs
parents:
diff changeset
   186
    LOG( DETAILED, "SATENGINE: CSatSActiveWrapper::RunL calling" )
hgs
parents:
diff changeset
   187
hgs
parents:
diff changeset
   188
    iWait.AsyncStop();
hgs
parents:
diff changeset
   189
hgs
parents:
diff changeset
   190
    LOG( DETAILED, "SATENGINE: CSatSActiveWrapper::RunL exiting" )
hgs
parents:
diff changeset
   191
    }
hgs
parents:
diff changeset
   192
hgs
parents:
diff changeset
   193
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   194
// CSatSActiveWrapper::DoCancel
hgs
parents:
diff changeset
   195
// Synchronous request complete
hgs
parents:
diff changeset
   196
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   197
//
hgs
parents:
diff changeset
   198
void CSatSActiveWrapper::DoCancel()
hgs
parents:
diff changeset
   199
    {
hgs
parents:
diff changeset
   200
    LOG( SIMPLE, "SATENGINE: CSatBIPUtils::DoCancel calling" )
hgs
parents:
diff changeset
   201
hgs
parents:
diff changeset
   202
    iWait.AsyncStop();
hgs
parents:
diff changeset
   203
hgs
parents:
diff changeset
   204
    LOG( SIMPLE, "SATENGINE: CSatBIPUtils::DoCancel exiting" )
hgs
parents:
diff changeset
   205
    }