tsrc/testtools/stubsrv/src/stubsrvsession.cpp
changeset 62 eadeea68c837
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tsrc/testtools/stubsrv/src/stubsrvsession.cpp	Tue Jul 13 00:24:10 2010 +0300
@@ -0,0 +1,135 @@
+/*
+* 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