Compartir vía


Enumeraciones (infraestructura del mismo nivel)

Mediante enumeraciones, puede obtener una lista de todas las entidades del mismo nivel específicas que coincidan con los criterios.

Para obtener una enumeración y recuperar los resultados

  1. Obtenga un identificador para la enumeración. Llame a una función PeerEnum, por ejemplo, llame a la función PeerGraphEnumRecordsPeerGraphEnumRecords. Las funciones de PeerEnum crean la enumeración y devuelven un identificador a esa enumeración a la aplicación que realiza la llamada. Este identificador debe usarse para recuperar los resultados.

  2. Opcionalmente, obtenga el número de entidades de la enumeración. Llame a una función GetItemCount, por ejemplo, llame a PeerGraphGetItemCount o PeerGetItemCount.

    Nota

    Puede usar el valor devuelto por la función GetItemCount para determinar el número de elementos disponibles para recuperar.

     

  3. Recupere un grupo de resultados. Llame a una función GetNextItem, por ejemplo, llame a PeerGraphGetNextItem.

    Nota

    Cuando una aplicación llama a una función GetNextItem, especifica el número de entidades que se van a devolver y, a continuación, la función devuelve un puntero a una matriz de punteros a las entidades y el número de entidades, que siempre es menor o igual que el número especificado. Es posible que una aplicación tenga que llamar a esta función muchas veces, hasta que el número de entidades devueltas sea menor que el número solicitado.

     

  4. Una vez que no se necesiten los datos, libere el puntero a los datos. Llame a una función freeData de, por ejemplo, llame a PeerGraphFreeData o PeerFreeData.

    Nota

    Para obtener más información, consulte liberar datos del mismo nivel.

     

  5. Después de que la aplicación no necesite el identificador de la enumeración, sueltela. Llame a una función EndEnumeration, por ejemplo, llame a peerEndEnumeration o peerGraphEndEnumeration.

Ejemplo de una enumeración

En el siguiente fragmento de código se muestra cómo enumerar a través de identidades disponibles.

#include <p2p.h>
#include <stdio.h>

#pragma comment(lib, "p2p.lib")

//-----------------------------------------------------------------------------
// Function: EnumIdentities
//
// Purpose:  Demonstrate how to enumerate identities.
//
// Returns:  HRESULT
//

HRESULT EnumIdentities(void)
{
    HPEERENUM hPeerEnum = NULL;
    HRESULT hr = PeerEnumIdentities(&hPeerEnum);

    if (SUCCEEDED(hr))
    {
        ULONG cIdentities = 0;
        hr = PeerGetItemCount(hPeerEnum, &cIdentities);

        if (SUCCEEDED(hr))
        {
            ULONG i;

            for (i = 0; i < cIdentities; i++)
            {
                ULONG cItem = 1; // process one result at a time
                PEER_NAME_PAIR ** ppNamePair = NULL; // pointer to an array of pointers

                hr = PeerGetNextItem(hPeerEnum, &cItem, (PVOID**) &ppNamePair);

                if (SUCCEEDED(hr) && (1 == cItem))
                {
                    wprintf(L"%s [%s]\r\n", (*ppNamePair)->pwzFriendlyName, (*ppNamePair)->pwzPeerName);
                    PeerFreeData(ppNamePair);
                }
            }
        }
        PeerEndEnumeration(hPeerEnum);
    }
 
    return hr;
}