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
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.
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.
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.
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.
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;
}