// Link a node to this one void pyVaultNode::LinkToNode(int nodeID, PyObject* cbObject, uint32_t cbContext) { pyVaultNodeOperationCallback * cb = new pyVaultNodeOperationCallback( cbObject ); if (fNode && nodeID) { // Hack the callbacks until vault notification is in place cb->VaultOperationStarted( cbContext ); if (hsRef<RelVaultNode> rvn = VaultGetNode(nodeID)) { cb->SetNode(rvn); cb->fPyNodeRef = pyVaultNodeRef::New(fNode, rvn); } VaultAddChildNode(fNode->GetNodeId(), nodeID, NetCommGetPlayer()->playerInt, (FVaultAddChildNodeCallback)_AddNodeCallback, cb ); } else { // manually make the callback cb->VaultOperationStarted( cbContext ); cb->VaultOperationComplete( cbContext, hsFail ); } }
PyObject* pyVault::FindNode( pyVaultNode* templateNode ) const { // See if we already have a matching node locally if (hsRef<RelVaultNode> rvn = VaultGetNode(templateNode->GetNode())) return pyVaultNode::New(rvn); // See if a matching node exists on the server ARRAY(unsigned) nodeIds; VaultFindNodesAndWait(templateNode->GetNode(), &nodeIds); if (nodeIds.Count()) { // Only fetch the first matching node since this function returns a single node VaultFetchNodesAndWait(&nodeIds[0], 1); // If we fetched it successfully then it'll be in our local node cache now if (hsRef<RelVaultNode> rvn = VaultGetNode(nodeIds[0])) return pyVaultNode::New(rvn); } PYTHON_RETURN_NONE; }
PyObject* pyVaultNode::GetCreatorNode( void ) { PyObject * result = nil; if (fNode) { hsRef<RelVaultNode> templateNode = new RelVaultNode; templateNode->SetNodeType(plVault::kNodeType_PlayerInfo); VaultPlayerInfoNode plrInfo(templateNode); plrInfo.SetPlayerId(fNode->GetCreatorId()); if (hsRef<RelVaultNode> rvn = VaultGetNode(templateNode)) result = pyVaultPlayerInfoNode::New(rvn); } if (result) return result; // just return a None object PYTHON_RETURN_NONE; }