datacommsserver/esockserver/test/providers/dummy/inc/activitytest.h
branchRCL_3
changeset 28 9ddb1d67ebaf
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/datacommsserver/esockserver/test/providers/dummy/inc/activitytest.h	Tue May 11 17:20:19 2010 +0300
@@ -0,0 +1,142 @@
+// Copyright (c) 2006-2009 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:
+//
+
+/**
+ @file
+ @internalTechnology
+*/
+
+#include <elements/mm_states.h>
+#include <ss_internal_activities.h>
+
+#ifndef SYMBIAN_ACTIVITYTEST
+#define SYMBIAN_ACTIVITYTEST
+
+namespace CancelTestBindToActivity
+    {
+    DECLARE_NODEACTIVITY(CancelBindTo)
+    }
+
+class CActivityCancelTest : public MeshMachine::CNodeRetryActivity
+                                      
+/**
+@internalTechnology
+*/
+    {
+public:
+    //TODO
+    enum {ECancelTestActivity = ESock::ECFActivityBuildStack };
+    static MeshMachine::CNodeActivityBase* NewL(const MeshMachine::TNodeActivity& aActivitySig, MeshMachine::AMMNodeBase& aNode)
+        {
+        CActivityCancelTest* self = new (ELeave) CActivityCancelTest(aActivitySig, aNode);
+        return self;
+        }
+
+    class TProgressiveMutex
+        {
+        public:
+        static TBool IsBlocked(MeshMachine::TNodeContextBase& aContext)
+            {
+            return static_cast<CActivityCancelTest&>(*aContext.iNodeActivity).ProgressiveMutex();
+            }
+        };
+    
+    void NextLoop()
+        {
+        iMaxLoopCount++;
+        iCurrentLoopCount = 0;        
+        }
+    
+    TBool ProgressiveMutex()
+        {
+        return ++iCurrentLoopCount <= iMaxLoopCount;
+        }
+    
+protected:
+    CActivityCancelTest(const MeshMachine::TNodeActivity& aActivitySig, MeshMachine::AMMNodeBase& aNode)
+    :   CNodeRetryActivity(aActivitySig, aNode)
+        {
+        }
+    
+    void StoreRequestL(const Messages::TSignatureBase& aRequest);
+    const Messages::TSignatureBase& StoredRequest()
+        { 
+        return *reinterpret_cast<const Messages::TSignatureBase*>(iStoredRequest.Ptr()); 
+        }
+    
+    
+private:
+    TBuf8<__Align8(Messages::TSignalBase::KMaxInlineMessageSize + Messages::TSignalBase::KMaxUnstoredOverhead)> iStoredRequest;
+    TInt iMaxLoopCount;
+    TInt iCurrentLoopCount;
+    
+public:
+    typedef MeshMachine::TContext TContext;
+    
+    template<typename TMESSAGE>
+    class TAwaitingMessageState : public MeshMachine::TState<TContext>
+        {
+    public:
+        NETSM_TPL_DECLARE_CTR(TAwaitingMessageState, NetStateMachine::MState, TContext)
+
+        explicit TAwaitingMessageState(TContext& aContext) :
+            MeshMachine::TState<TContext>(aContext) {}
+
+        virtual TBool Accept()
+                {
+    #ifdef __GCCXML__
+                return EFalse;
+    #else
+                if (Messages::address_cast<const Messages::TNodeCtxId>(iContext.iSender).NodeCtx() != CActivityCancelTest::ECancelTestActivity)
+                    {
+                    Messages::TNodeSignal& msg = this->iContext.iMessage; //Arm compiler is getting confused otherwise
+                    return msg.IsMessage<TMESSAGE>();
+                    }
+    #endif
+                return EFalse;                
+                }
+        };  
+
+    DECLARE_SMELEMENT_HEADER( TNoTagForwardOrActiveTagBackward, MeshMachine::TStateFork<TContext>, NetStateMachine::MStateFork, TContext )
+        virtual TInt TransitionTag();
+    DECLARE_SMELEMENT_FOOTER( TNoTagForwardOrActiveTagBackward )    
+    
+    DECLARE_SMELEMENT_HEADER( TBeginTest, MeshMachine::TStateTransition<TContext>, NetStateMachine::MStateTransition, TContext )
+        virtual void DoL();
+    DECLARE_SMELEMENT_FOOTER( TBeginTest )
+    
+    DECLARE_SMELEMENT_HEADER( TBeginLoop, MeshMachine::TStateTransition<TContext>, NetStateMachine::MStateTransition, TContext )
+        virtual void DoL();
+    DECLARE_SMELEMENT_FOOTER( TBeginLoop )    
+
+    DECLARE_SMELEMENT_HEADER( TCancel, MeshMachine::TStateTransition<TContext>, NetStateMachine::MStateTransition, TContext )
+        virtual void DoL();
+    DECLARE_SMELEMENT_FOOTER( TCancel )
+
+    DECLARE_SMELEMENT_HEADER( TEndTest, MeshMachine::TStateTransition<TContext>, NetStateMachine::MStateTransition, TContext )
+        virtual void DoL();
+    DECLARE_SMELEMENT_FOOTER( TEndTest )
+    
+    DECLARE_SERIALIZABLE_TRANSITION(
+        TProgressiveCancel,
+        TProgressiveMutex,
+        TCancel
+        )      
+    };
+
+
+#endif //SYMBIAN_ACTIVITYTEST
+
+