PyObject* pyVaultNode::AddNode(pyVaultNode* pynode, PyObject* cbObject, uint32_t cbContext) { pyVaultNodeOperationCallback * cb = new pyVaultNodeOperationCallback(cbObject); if ( fNode && pynode && pynode->GetNode() ) { // Hack the callbacks until vault notification is in place cb->VaultOperationStarted(cbContext); int hsResult = hsOK; if ( !pynode->GetID() ) { // Block here until node is created and fetched =( ASSERT(pynode->GetNode()->GetNodeType()); ENetError result; RelVaultNode * newNode = VaultCreateNodeAndWaitIncRef( pynode->GetNode(), &result ); if (newNode) { newNode->Ref(); pynode->fNode->UnRef(); pynode->fNode = newNode; } else { hsResult = hsFail; } } PyObject* nodeRef = cb->fPyNodeRef = pyVaultNodeRef::New(fNode, pynode->fNode); Py_INCREF(nodeRef); // The callback steals the ref, according to Eric... cb->SetNode(pynode->fNode); VaultAddChildNode(fNode->GetNodeId(), pynode->fNode->GetNodeId(), NetCommGetPlayer()->playerInt, (FVaultAddChildNodeCallback)_AddNodeCallback, cb ); // Evil undocumented functionality that some fool // decided to use in xKI.py. Really??? return nodeRef; } else { // manually make the callback cb->VaultOperationStarted( cbContext ); cb->VaultOperationComplete(hsFail); } // just return a None object PYTHON_RETURN_NONE; }
PyObject * pyVaultNode::GetChildNode (unsigned nodeId) { if (!fNode) PYTHON_RETURN_NONE; RelVaultNode * templateNode = new RelVaultNode; templateNode->Ref(); templateNode->SetNodeId(nodeId); RelVaultNode * rvn = fNode->GetChildNodeIncRef(templateNode, 1); templateNode->UnRef(); if (rvn) { PyObject * result = pyVaultNode::New(rvn); rvn->UnRef(); return result; } PYTHON_RETURN_NONE; }
PyObject * pyVaultNode::GetNode2( uint32_t nodeID ) const { PyObject * result = nil; if ( fNode ) { RelVaultNode * templateNode = new RelVaultNode; templateNode->Ref(); templateNode->SetNodeId(nodeID); if (RelVaultNode * rvn = fNode->GetChildNodeIncRef(templateNode, 1)) { result = pyVaultNodeRef::New(fNode, rvn); rvn->UnRef(); } templateNode->UnRef(); } if (result) return result; PYTHON_RETURN_NONE; }
PyObject* pyVaultNode::GetCreatorNode( void ) { PyObject * result = nil; if (fNode) { RelVaultNode * templateNode = new RelVaultNode; templateNode->Ref(); templateNode->SetNodeType(plVault::kNodeType_PlayerInfo); VaultPlayerInfoNode plrInfo(templateNode); plrInfo.SetPlayerId(fNode->GetCreatorId()); if (RelVaultNode * rvn = VaultGetNodeIncRef(templateNode)) { result = pyVaultPlayerInfoNode::New(rvn); rvn->UnRef(); } templateNode->UnRef(); } if (result) return result; // just return a None object PYTHON_RETURN_NONE; }