void XnVFlowRouter::OpenNewSession() { if (m_pActive == NULL) { return; } xnLogVerbose(XNV_NITE_MASK_CONNECT, "Router %s [0x%08x]: Connecting %s [0x%08x] as active", GetListenerName(), this, m_pActive->GetListenerName(), m_pActive); XnVMultipleHands newHands; XnVMultipleHands* pLocalHands; XnValue value; m_pProperties->Get(FR_PROPERTY_HANDS, value); pLocalHands = (XnVMultipleHands*)value; // Create a Multiple Hands object with the same hands, indicating all of them are new pLocalHands->Clone(newHands); newHands.ClearLists(); for (XnVMultipleHands::Iterator iter = newHands.begin(); iter != newHands.end(); ++iter) { newHands.MarkActive((*iter)->nID); newHands.MarkNew((*iter)->nID); } // Send an Activation Message XnVActivationMessage activate(true); m_pActive->BaseUpdate(&activate); // Send the 'all-new' Point Message to to listener that's being activated XnVPointMessage pointMessage(&newHands); m_pActive->BaseUpdate(&pointMessage); } // XnVFlowRouter::OpenNewSession
void XnVFlowRouter::CloseOldSession() { if (m_pActive == NULL) { return; } xnLogVerbose(XNV_NITE_MASK_CONNECT, "Router %s [0x%08x]: Disconnecting %s [0x%08x] as active", GetListenerName(), this, m_pActive->GetListenerName(), m_pActive); XnVMultipleHands oldHands; XnVMultipleHands* pLocalHands; XnValue value; m_pProperties->Get(FR_PROPERTY_HANDS, value); pLocalHands = (XnVMultipleHands*)value; // Create a Multiple Hands object with the same hands, indicating all of them are old pLocalHands->Clone(oldHands); oldHands.ClearLists(); while (oldHands.begin() != oldHands.end()) { oldHands.MarkOld((*oldHands.begin())->nID); oldHands.Remove((*oldHands.begin())->nID); } m_pActive->ClearQueue(); // Send the 'all-old' Point Message to to listener that's being deactivated XnVPointMessage pointMessage(&oldHands); m_pActive->BaseUpdate(&pointMessage); // Send a Deactivation Message XnVActivationMessage deactivate(false); m_pActive->BaseUpdate(&deactivate); } // XnVFlowRouter::CloseOldSession