示例#1
0
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;
}
示例#2
0
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;
}
示例#3
0
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;
}
示例#4
0
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;
}