linklayercontrol/networkinterfacemgr/agentprcore/src/agentscpractivities.cpp
changeset 14 b33c3d136b7e
parent 0 af10295192d8
child 25 d15a50675083
--- a/linklayercontrol/networkinterfacemgr/agentprcore/src/agentscpractivities.cpp	Tue Feb 02 01:27:53 2010 +0200
+++ b/linklayercontrol/networkinterfacemgr/agentprcore/src/agentscpractivities.cpp	Fri Apr 16 16:36:59 2010 +0300
@@ -24,6 +24,7 @@
 //#include <comms-infras/corescprstates.h>
 #include <comms-infras/corescpractivities.h>
 #include <comms-infras/ss_nodemessages_dataclient.h>
+#include <elements/nm_messages_child.h>
 
 #include "agentscprstates.h"
 #include "agentscpractivities.h"
@@ -94,11 +95,30 @@
 NODEACTIVITY_END()
 }
 
+namespace AgentSCprDestroyActivity
+{
+//Overridden destroy for cleaning up the agent if its still about
+DECLARE_DEFINE_CUSTOM_NODEACTIVITY(ECFActivityDestroy, AgentSCprDestroy, Messages::TEChild::TDestroy, CoreActivities::CDestroyActivity::New)
+    FIRST_NODEACTIVITY_ENTRY(MeshMachine::TAwaitingDestroy, CoreActivities::CDestroyActivity::TNoTagBlockedByActivitiesOrLeavingDataClient)
 
+    ROUTING_NODEACTIVITY_ENTRY(KNoTag, AgentSCprStates::TNoTagOrProviderStopped)
+    NODEACTIVITY_ENTRY(KNoTag, AgentSCprStates::TStopAgent, AgentSCprStates::TAwaitingAgentDown, MeshMachine::TTag<CoreNetStates::KProviderStopped>)
+    ROUTING_NODEACTIVITY_ENTRY(CoreNetStates::KProviderStopped, CoreStates::TNoTagOrNoClients)
+        
+    //The node mustn't go out of scope with clients present. The node must get rid of them first.
+    NODEACTIVITY_ENTRY(KNoTag, CoreActivities::CDestroyActivity::TMakeClientsLeaveOrProcessClientLeave, CoreStates::TAwaitingClientLeave,  CoreActivities::CDestroyActivity::TNoTagOrNoTagBackwards)
+    THROUGH_NODEACTIVITY_ENTRY(KNoTag, CoreActivities::CDestroyActivity::TProcessClientLeave, TTag<CoreNetStates::KNoClients>)
+
+    THROUGH_NODEACTIVITY_ENTRY(CoreNetStates::KNoClients, PRStates::TProcessDestroy, MeshMachine::TNoTag)
+    NODEACTIVITY_ENTRY(KNoTag, MeshMachine::TDoNothing, MeshMachine::TAwaitingLeaveComplete, CoreActivities::CDestroyActivity::TNoTagOrNoTagBackwards)
+    LAST_NODEACTIVITY_ENTRY(KNoTag, CoreNetStates::TSendClientLeavingAndRemoveControlProvider)
+NODEACTIVITY_END()
+}
 // Activity Map
 namespace AgentSCprActivities
 {
 DEFINE_EXPORT_ACTIVITY_MAP(agentSCprActivities)
+   ACTIVITY_MAP_ENTRY(AgentSCprDestroyActivity, AgentSCprDestroy)
    ACTIVITY_MAP_ENTRY(AgentSCprNotificationFromFlowActivity, AgentSCprNotificationFromFlow)
    ACTIVITY_MAP_ENTRY(AgentSCprAuthenticationActivity, AgentSCprAuthentication)
    ACTIVITY_MAP_ENTRY(AgentSCprDataClientGoneDownActivity, AgentSCprDataClientGoneDown)