void CFlowGraphModule::ActivateGraph(IFlowGraph* pGraph, TModuleInstanceId instanceId, TModuleParams const ¶ms) const { if (pGraph) { IFlowNodeIteratorPtr pNodeIter = pGraph->CreateNodeIterator(); if (pNodeIter) { TFlowNodeId id = InvalidFlowNodeId; IFlowNodeData* pData; while (pData = pNodeIter->Next(id)) { // Check if its the starting node if (m_startNodeTypeId == pData->GetNodeTypeId()) { CFlowModuleStartNode* pNode = (CFlowModuleStartNode*)pData->GetNode(); pNode->OnActivate(params); } // Check if its the returning node if (m_returnNodeTypeId == pData->GetNodeTypeId()) { CFlowModuleReturnNode* pNode = (CFlowModuleReturnNode*)pData->GetNode(); pNode->SetModuleId(m_Id, instanceId); } } } } }
void CFlowGraphModule::CancelInstance(TModuleInstanceId instanceId) { // Find the instance, and request cancel TInstanceList::iterator i = m_instances.begin(); TInstanceList::iterator end = m_instances.end(); for (; i != end; ++i) { if (i->instanceId == instanceId) { IFlowGraph* pGraph = i->pGraph; if (pGraph) { IFlowNodeIteratorPtr pNodeIter = pGraph->CreateNodeIterator(); if (pNodeIter) { TFlowNodeId id = InvalidFlowNodeId; IFlowNodeData* pData; while (pData = pNodeIter->Next(id)) { // Check if its the starting node if (m_startNodeTypeId == pData->GetNodeTypeId()) { CFlowModuleStartNode* pNode = (CFlowModuleStartNode*)pData->GetNode(); pNode->OnCancel(); break; } } } } break; } } }