Condividi tramite


Enumerazioni (infrastruttura peer)

Usando enumerazioni, è possibile ottenere un elenco di tutte le entità peer specifiche che soddisfano i criteri.

Per ottenere un'enumerazione e recuperare i risultati

  1. Ottenere un handle per l'enumerazione . Chiamare una funzione PeerEnum , ad esempio, chiamare la funzione PeerGraphEnumRecords Peer Graphing. Le funzioni PeerEnum creano l'enumerazione e restituiscono un handle a tale enumerazione all'applicazione chiamante. Questo handle deve essere utilizzato per recuperare i risultati.

  2. Facoltativamente, ottenere il numero di entità nell'enumerazione . Chiamare una funzione GetItemCount , ad esempio, chiamare PeerGraphGetItemCount o PeerGetItemCount.

    Nota

    È possibile usare il valore restituito dalla funzione GetItemCount per determinare il numero di elementi disponibili per il recupero.

     

  3. Recuperare un gruppo di risultati. Chiamare una funzione GetNextItem , ad esempio, chiamare PeerGraphGetNextItem.

    Nota

    Quando un'applicazione chiama una funzione GetNextItem , specifica il numero di entità da restituire e quindi la funzione restituisce un puntatore a una matrice di puntatori alle entità e il numero di entità, che è sempre minore o uguale al numero specificato. Un'applicazione potrebbe dover chiamare questa funzione molte volte, fino a quando il numero di entità restituite è minore del numero richiesto.

     

  4. Dopo che i dati non sono necessari, liberare il puntatore ai dati. Chiamare una funzione FreeData , ad esempio, chiamare PeerGraphFreeData o PeerFreeData.

     

  5. Dopo che l'applicazione non ha bisogno dell'handle per l'enumerazione, rilasciarla. Chiamare una funzione EndEnumeration , ad esempio chiamare PeerEndEnumeration o PeerGraphEndEnumeration.

Esempio di enumerazione

Il frammento di codice seguente illustra come enumerare le identità disponibili.

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