datacommsserver/esockserver/test/providers/dummy/src/dummypr_metaconnprov.cpp
changeset 65 41cc8e7ff496
parent 22 592244873960
equal deleted inserted replaced
40:34fc115b8742 65:41cc8e7ff496
    25 #include <comms-infras/coremcprstates.h>
    25 #include <comms-infras/coremcprstates.h>
    26 #include <comms-infras/coremcpractivities.h>
    26 #include <comms-infras/coremcpractivities.h>
    27 #include <elements/nm_messages_errorrecovery.h>
    27 #include <elements/nm_messages_errorrecovery.h>
    28 #include <comms-infras/mobilitymcpractivities.h>
    28 #include <comms-infras/mobilitymcpractivities.h>
    29 #include "dummypr_metaconnprov.h"
    29 #include "dummypr_metaconnprov.h"
       
    30 #include "dummypr_connprov.h"
    30 #include "dummypr_mcprpubsubsubscriber.h"
    31 #include "dummypr_mcprpubsubsubscriber.h"
    31 
    32 
    32 #ifdef _DEBUG
    33 #ifdef _DEBUG
    33 #define KDummyMCprTag KESockMetaConnectionTag
    34 #define KDummyMCprTag KESockMetaConnectionTag
    34 _LIT8(KDummyMCprSubTag, "dummymcpr");
    35 _LIT8(KDummyMCprSubTag, "dummymcpr");
    40 using namespace Messages;
    41 using namespace Messages;
    41 using namespace MeshMachine;
    42 using namespace MeshMachine;
    42 
    43 
    43 
    44 
    44 
    45 
       
    46 DEFINE_SMELEMENT(CDummyMCPRControlClientJoinActivity::TAddControlClient, NetStateMachine::MStateTransition, TContext)
       
    47 void CDummyMCPRControlClientJoinActivity::TAddControlClient::DoL()
       
    48     {
       
    49     TCFPeer::TJoinRequest& msg = message_cast<TCFPeer::TJoinRequest>(iContext.iMessage);
       
    50 
       
    51     // Client type could be Messages::TClientType::EWorker (Selection Request)
       
    52     // or ESock::TCFClientType::ECtrl, possibly others but not ESock::TCFClientType::EData
       
    53     // which is handled by another activity
       
    54     ASSERT(msg.iClientType.Type() != (TUint32)TCFClientType::EData);
       
    55 
       
    56     iContext.Activity()->ReplaceOriginator(
       
    57             *iContext.Node().AddClientL(msg.iNodeId, TClientType(TCFClientType::ECtrl)));
       
    58     }
       
    59 
       
    60 
       
    61 DEFINE_SMELEMENT(CDummyMCPRControlClientJoinActivity::TSendJoinComplete, NetStateMachine::MStateTransition, TContext)
       
    62 void CDummyMCPRControlClientJoinActivity::TSendJoinComplete::DoL()
       
    63     {
       
    64     ASSERT(iContext.iNodeActivity);
       
    65     
       
    66     iContext.iNodeActivity->PostToOriginators(TCFPeer::TJoinComplete().CRef());
       
    67     }
       
    68 
       
    69 
       
    70 MeshMachine::CNodeActivityBase* CDummyMCPRControlClientJoinActivity::NewL( const MeshMachine::TNodeActivity& aActivitySig, MeshMachine::AMMNodeBase& aNode )
       
    71     {
       
    72     TUint c = GetNextActivityCountL(aActivitySig,aNode);
       
    73     return new(ELeave)CDummyMCPRControlClientJoinActivity(aActivitySig, aNode, c);
       
    74     }
       
    75 
       
    76 void CDummyMCPRControlClientJoinActivity::ReplaceOriginator(RNodeInterface& aOriginator)
       
    77     {
       
    78     iOriginators.Remove(0);
       
    79     TInt err = KErrNone;
       
    80     TRAP(err, iOriginators.AppendL(XNodePeerId(aOriginator.RecipientId(), &aOriginator)));
       
    81     ASSERT(err == KErrNone); //This test code is a wee bit lame. If executed in OOM, it may not work.
       
    82     }
       
    83 
       
    84 namespace DummyMCPRControlClientJoinActivity
       
    85 {
       
    86 //DummyMCPRControlClientJoin is a special version of the core MCPR join activity that will artificially yield some time (50ms) to schedule the
       
    87 //test app. This is done to test RConnection::Stop injections at various RConnection::Start stages. Production MCPRs yield a lot reading database or
       
    88 //consulting other external entities, so the test MCPR must try to be representative. 
       
    89 DECLARE_DEFINE_CUSTOM_NODEACTIVITY(ECFActivityClientJoin, DummyMCPRControlClientJoin, TCFServiceProvider::TJoinRequest, CDummyMCPRControlClientJoinActivity::NewL)
       
    90     FIRST_NODEACTIVITY_ENTRY(CoreNetStates::TAwaitingControlClientJoin, MeshMachine::TNoTag)
       
    91     THROUGH_NODEACTIVITY_ENTRY(KNoTag, CDummyMCPRControlClientJoinActivity::TAddControlClient, MeshMachine::TNoTag)
       
    92     NODEACTIVITY_ENTRY(KNoTag, CDelayTimer::TSetTimerMs<50>, CDelayTimer::TAwaitingTimerExpired, MeshMachine::TNoTag)
       
    93     THROUGH_NODEACTIVITY_ENTRY(KNoTag, MCprStates::TDecrementBlockingDestroy, MeshMachine::TNoTag)
       
    94     LAST_NODEACTIVITY_ENTRY(KNoTag, CDummyMCPRControlClientJoinActivity::TSendJoinComplete)   
       
    95 NODEACTIVITY_END()
       
    96 }
       
    97 
       
    98 
       
    99 namespace DummyMCPRActivities
       
   100 {
       
   101 DECLARE_DEFINE_ACTIVITY_MAP(stateMap)
       
   102    ACTIVITY_MAP_ENTRY(DummyMCPRControlClientJoinActivity, DummyMCPRControlClientJoin)
       
   103 ACTIVITY_MAP_END_BASE(MobilityMCprActivities, mobilityMCprActivities)
       
   104 }
       
   105 
    45 CDummyMetaConnectionProvider* CDummyMetaConnectionProvider::NewL(CMetaConnectionProviderFactoryBase& aFactory,
   106 CDummyMetaConnectionProvider* CDummyMetaConnectionProvider::NewL(CMetaConnectionProviderFactoryBase& aFactory,
    46                                                                      const TProviderInfo& aProviderInfo)
   107                                                                      const TProviderInfo& aProviderInfo)
    47 	{
   108 	{
    48 	CDummyMetaConnectionProvider* self = new (ELeave) CDummyMetaConnectionProvider(aFactory,aProviderInfo,MobilityMCprActivities::mobilityMCprActivities::Self());
   109 	CDummyMetaConnectionProvider* self = new (ELeave) CDummyMetaConnectionProvider(aFactory,aProviderInfo,DummyMCPRActivities::stateMap::Self());
    49 	CleanupStack::PushL(self);
   110 	CleanupStack::PushL(self);
    50 	self->ConstructL();
   111 	self->ConstructL();
    51 	CleanupStack::Pop(self);
   112 	CleanupStack::Pop(self);
    52 	return self;
   113 	return self;
    53 	}
   114 	}