Compartilhar via


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

  1. 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.

  2. 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.

     

  3. 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.

     

  4. 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.

     

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