sl@0: /* sl@0: * Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). sl@0: * All rights reserved. sl@0: * This component and the accompanying materials are made available sl@0: * under the terms of the License "Eclipse Public License v1.0" sl@0: * which accompanies this distribution, and is available sl@0: * at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: * sl@0: * Initial Contributors: sl@0: * Nokia Corporation - initial contribution. sl@0: * sl@0: * Contributors: sl@0: * sl@0: * Description: sl@0: * Test implementation of a session count server tests the base functionality sl@0: * will work for sessions, subsessions, and asynchronous requests. sl@0: * sl@0: */ sl@0: sl@0: sl@0: /** sl@0: @internalComponent sl@0: @test sl@0: @file sl@0: */ sl@0: sl@0: #ifndef SCSTESTSERVER_H sl@0: #define SCSTESTSERVER_H sl@0: sl@0: #include sl@0: #include "scstestcommon.h" sl@0: sl@0: // forward declarations sl@0: class CScsTestSession; sl@0: class CScsTestSubsession; sl@0: sl@0: class CTrebleRequest : public CAsyncRequest sl@0: /** sl@0: Trebles a client-side TInt. The request is completed asynchronously, sl@0: some time after it has been queued. sl@0: */ sl@0: { sl@0: public: sl@0: static CTrebleRequest* NewL(CScsTestSession* aSession, CScsTestSubsession* aSubsession, const RMessage2& aMessage); sl@0: virtual ~CTrebleRequest(); sl@0: sl@0: // implement CActive sl@0: virtual void DoCancel(); sl@0: // implement CActive, override CAsyncRequest sl@0: virtual void RunL(); sl@0: sl@0: private: sl@0: CTrebleRequest(CScsTestSession* aSession, CScsTestSubsession* aSubsession, const RMessage2& aMessage); sl@0: void ConstructL(); sl@0: sl@0: private: sl@0: RTimer iTimer; ///< Provides the delay which makes this request asynchronous. sl@0: }; sl@0: sl@0: class CScsTestSession; sl@0: class CScsTestSubsession : public CScsSubsession sl@0: /** sl@0: This subsession class is defined to ensure that requests are sl@0: routed to, and asynchronous requests associated with, the correct sl@0: object. sl@0: */ sl@0: { sl@0: public: sl@0: static CScsTestSubsession* NewL(CScsTestSession &aSession, const RMessage2& aMessage); sl@0: virtual ~CScsTestSubsession(); sl@0: sl@0: // implement CScsSubsession sl@0: virtual TBool DoServiceL(TInt aFunction, const RMessage2& aMessage); sl@0: sl@0: private: sl@0: CScsTestSubsession(CScsTestSession &aSession); sl@0: sl@0: private: sl@0: TInt iValue; ///< Value on which this subsession is curried. sl@0: }; sl@0: sl@0: class CScsTestServer; sl@0: class CScsTestSession : public CScsSession sl@0: /** sl@0: Tests the underlying session count session implementation by sl@0: handling requests, asynchronous requests, and creating subsessions. sl@0: */ sl@0: { sl@0: public: sl@0: static CScsTestSession* NewL(CScsTestServer &aServer); sl@0: virtual ~CScsTestSession(); sl@0: sl@0: // implement CScsSession sl@0: virtual TBool DoServiceL(TInt aFunction, const RMessage2& aMessage); sl@0: // override CScsSession sl@0: virtual CScsSubsession* DoCreateSubsessionL(TInt aFunction, const RMessage2& aMessage); sl@0: sl@0: private: sl@0: CScsTestSession(CScsTestServer &aServer); sl@0: }; sl@0: sl@0: class CScsTestServer : public CScsServer sl@0: /** sl@0: This test implementation of the session count server provides sl@0: the functionality to create sessions and subsessions, and to sl@0: queue asynchronous requests on each of them. sl@0: */ sl@0: { sl@0: public: sl@0: static CScsTestServer* NewLC(); sl@0: virtual ~CScsTestServer(); sl@0: sl@0: // implement CScsServer sl@0: virtual CScsSession* DoNewSessionL(const RMessage2& aMessage); sl@0: sl@0: private: sl@0: CScsTestServer(); sl@0: void ConstructL(TInt aShutdownPeriodUs); sl@0: }; sl@0: sl@0: #endif // #ifndef SCSTESTSERVER_H sl@0: