tsrc/testtools/stubsrv/src/stubsrvsession.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 19 Aug 2010 10:54:11 +0300
branchRCL_3
changeset 22 5b2a402e96ac
permissions -rw-r--r--
Revision: 201031 Kit: 201033

/*
* Copyright (c) 2010 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:
*
*/

// INCLUDE FILES
#include "stubsrvsession.h"
#include "stubsrv.h"
#include "stubsrvapiexecutor.h"
#include "stubclientsrv.h"

CStubSrvSess* CStubSrvSess::NewL(CStubSrv& aServer)
    {
    CStubSrvSess* self = new (ELeave) CStubSrvSess (aServer);
    CleanupStack::PushL(self);
    self->ConstructL();
    CleanupStack::Pop(self);
    return self;
    }

CStubSrvSess::~CStubSrvSess()
    {
    delete iExecutor;
    iServer.ClientClosed(*this);
    }

void CStubSrvSess::InvokeApiComplete()
    {
    delete iExecutor;
    iExecutor = NULL;
    }

TInt CStubSrvSess::ConsumeApiBehavior(const TApiBehavior& aBeh, TInt aExeDuration)    
    {
    if (iExecutor && iExecutor->Mode() == ESuspendIfNoBehaviorSet &&
        iExecutor->ApiBehavior().MatchId(aBeh))
        {
        iExecutor->Resume(aBeh, aExeDuration);
        return KErrNone;
        }
    return KErrNotFound;
    }
    
void CStubSrvSess::ServiceL(const RMessage2& aMessage)
    {
    TRAPD(err, DispatchMessageL( aMessage ));
    if (err != KErrNone)
        {
        aMessage.Panic(KStubSrvName, err);
        }
    }

void CStubSrvSess::DispatchMessageL(const RMessage2& aMessage)
    {
    switch (aMessage.Function())
        {
        case EStubSrvEnqueApiBehavior:
            {
            iServer.EnqueueL(aMessage);
            aMessage.Complete(KErrNone);
            break;
            }
        case EStubSrvDeleteApiBehaviors:
            {
            iServer.DeleteQueues(aMessage);
            aMessage.Complete(KErrNone);
            break;
            }
        case EStubSrvInvokeApi:
            {
            if (iExecutor)
                {
                aMessage.Panic(KStubSrvName, EStubfApiAlreadyStarted);
                break;
                }
            TApiBehavior  beh;
            TApiBehaviorPckg pckg(beh);
            aMessage.ReadL(0, pckg);
            TInt transactionId = aMessage.Int2();
            TInt dur = 0;
            TInt err = iServer.Dequeue(beh, dur, transactionId);
            iExecutor = CApiExecutor::NewL();
            if (err)
                {
                iExecutor->ExecuteL(aMessage, *this, beh.iLib, beh.iApi);
                }
            else
                {
                iExecutor->ExecuteL(aMessage, *this, beh, dur);
                }
            break;
            }
        case EStubSrvInvokeApiCancel:
            {
            delete iExecutor;
            iExecutor = NULL;
            aMessage.Complete(KErrNone);
            break;
            }
        case EStubSrvGetApiCompletionCode:
            {
            iServer.GetApiCompleteCodeL(aMessage);
            break;
            }
        default:
            {
            aMessage.Panic(KStubSrvName, EStubfBadRequest);
            break;
            }
        }
    }

CStubSrvSess::CStubSrvSess(CStubSrv& aServer) : iServer(aServer)
    {
    }

void CStubSrvSess::ConstructL()
    {
    iServer.ClientOpened(*this);
    }


// End of File