datacommsserver/esockserver/ssock/ss_flowrequeststates.cpp
branchRCL_3
changeset 12 8b5d60ce1e94
parent 0 dfb7c4ff071f
child 23 cbb19216b74d
equal deleted inserted replaced
11:98a7181d2ce7 12:8b5d60ce1e94
   156 	// Cleanup
   156 	// Cleanup
   157 	CleanupStack::Pop(&bundle);
   157 	CleanupStack::Pop(&bundle);
   158 	CleanupStack::Pop(params);
   158 	CleanupStack::Pop(params);
   159 	}
   159 	}
   160 
   160 
       
   161 DEFINE_SMELEMENT(FlowRequestActivities::CFlowRequestActivity::TSendBindToComplete, NetStateMachine::MStateTransition, TContext)
       
   162 void FlowRequestActivities::CFlowRequestActivity::TSendBindToComplete::DoL()
       
   163     {
       
   164     __ASSERT_DEBUG(iContext.iNodeActivity, User::Panic(KCFlowRequestPanic, KPanicNoActivity));
       
   165     CFlowRequestActivity& activity = static_cast<CFlowRequestActivity&>(*iContext.iNodeActivity);
       
   166     __ASSERT_DEBUG(!activity.iBindToSender.IsNull(), User::Panic(KSpecAssert_ESockSSockFlwRqS, 2)); 
       
   167     RClientInterface::OpenPostMessageClose(iContext.Node().Id(), activity.iBindToSender, TCFDataClient::TBindToComplete().CRef());
       
   168     activity.iBindToSender.SetNull();
       
   169     }
       
   170 
       
   171 DEFINE_SMELEMENT(FlowRequestActivities::CFlowRequestActivity::TAwaitingBindTo, NetStateMachine::MState, TContext)
       
   172 TBool FlowRequestActivities::CFlowRequestActivity::TAwaitingBindTo::Accept()
       
   173     {
       
   174     TBool accept(EFalse);     
       
   175     if(iContext.iMessage.IsMessage<TCFDataClient::TBindTo>()) 
       
   176         { 
       
   177         // store the node to which we send the response later on.
       
   178         __ASSERT_DEBUG(iContext.iNodeActivity, User::Panic(KCFlowRequestPanic, KPanicNoActivity));
       
   179         CFlowRequestActivity& activity = static_cast<CFlowRequestActivity&>(*iContext.iNodeActivity);
       
   180         __ASSERT_DEBUG(activity.iBindToSender.IsNull(), User::Panic(KSpecAssert_ESockSSockFlwRqS, 3));
       
   181         activity.iBindToSender = iContext.iSender;
       
   182         accept = ETrue;
       
   183         } 
       
   184     
       
   185     return accept;
       
   186     }
   161 
   187 
   162 DEFINE_SMELEMENT(FlowRequestStates::TSendNoBearer, NetStateMachine::MStateTransition, FlowRequestStates::TContext)
   188 DEFINE_SMELEMENT(FlowRequestStates::TSendNoBearer, NetStateMachine::MStateTransition, FlowRequestStates::TContext)
   163 void FlowRequestStates::TSendNoBearer::DoL()
   189 void FlowRequestStates::TSendNoBearer::DoL()
   164 	{
   190 	{
   165 	// Make sure we are being executed in the context of a node that has an activity running
   191 	// Make sure we are being executed in the context of a node that has an activity running
   253 	//Join the service provider
   279 	//Join the service provider
   254 	iContext.iNodeActivity->PostRequestTo(*scpr, TCFServiceProvider::TJoinRequest(iContext.NodeId(), TClientType(TCFClientType::ECtrl)).CRef());
   280 	iContext.iNodeActivity->PostRequestTo(*scpr, TCFServiceProvider::TJoinRequest(iContext.NodeId(), TClientType(TCFClientType::ECtrl)).CRef());
   255 	}
   281 	}
   256 
   282 
   257 
   283 
       
   284 
       
   285 DEFINE_SMELEMENT(FlowRequestStates::TSendClientLeavingAndRemoveControlProvider, NetStateMachine::MStateTransition, FlowRequestStates::TContext)
       
   286 void FlowRequestStates::TSendClientLeavingAndRemoveControlProvider::DoL()
       
   287 	{
       
   288    	TClientIter<TDefaultClientMatchPolicy> iter = iContext.Node().GetClientIter<TDefaultClientMatchPolicy>(TClientType(TCFClientType::ECtrlProvider));
       
   289    	RNodeInterface* cl = iter[0];
       
   290    	//It is perfectly possible that there is no Control Provider at all.
       
   291    	if (cl)
       
   292    		{
       
   293 		__ASSERT_DEBUG(iContext.iNodeActivity, User::Panic(KCFlowRequestPanic, KPanicNoActivity));
       
   294 		cl->PostMessage(TNodeCtxId(iContext.ActivityId(), iContext.NodeId()), TEChild::TLeft().CRef());
       
   295    		iContext.Node().RemoveClient(cl->RecipientId(),iContext);
       
   296    		__ASSERT_DEBUG(iter[1] == NULL, User::Panic(KCFlowRequestPanic, KPanicNoControlProvider)); //But it is not possible to have two Control Providers!
       
   297    		}
       
   298 	}