Enumerações (infraestrutura de pares)
Usando Enumerações, você pode obter uma lista de todas as entidades par específicas que correspondem aos seus critérios.
Para obter uma enumeração e recuperar os resultados
Obtenha um identificador para a enumeração. Chame uma função PeerEnum , por exemplo, chame a função PeerGraphEnumRecords Peer Graphing. As funções PeerEnum criam a enumeração e retornam um identificador para essa enumeração para o aplicativo de chamada. Esse identificador deve ser usado para recuperar os resultados.
Opcionalmente, obtenha o número de entidades na enumeração . Chame uma função GetItemCount , por exemplo, chamar PeerGraphGetItemCount ou PeerGetItemCount.
Observação
Você pode usar o valor retornado pela função GetItemCount para determinar o número de itens disponíveis para recuperação.
Recuperar um grupo de resultados. Chame uma função GetNextItem , por exemplo, chame PeerGraphGetNextItem.
Observação
Quando um aplicativo chama uma função GetNextItem , ele especifica o número de entidades a serem retornadas e, em seguida, a função retorna um ponteiro para uma matriz de ponteiros para as entidades e o número de entidades, que é sempre menor ou igual ao número especificado. Um aplicativo pode precisar chamar essa função muitas vezes até que o número de entidades retornadas seja menor do que o número solicitado.
Depois que os dados não forem necessários, libere o ponteiro para os dados. Chame uma função FreeData , por exemplo, chamar PeerGraphFreeData ou PeerFreeData.
Observação
Para obter mais informações, consulte Liberando dados de pares.
Depois que o aplicativo não precisar do identificador para a enumeração, libere-o. Chame uma função EndEnumeration , por exemplo, chamar PeerEndEnumeration ou PeerGraphEndEnumeration.
Exemplo de enumeração
O snippet de código a seguir mostra como enumerar por meio de identidades disponíveis.
#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;
}