Udostępnij przez


Wyliczenia (infrastruktura równorzędna)

Korzystając z wyliczenia, można uzyskać listę wszystkich określonych jednostek równorzędnych, które spełniają kryteria.

Aby uzyskać wyliczenie i pobrać wyniki

  1. Uzyskaj dojście do wyliczenia. Wywołaj funkcję PeerEnum, na przykład wywołaj funkcję PeerGraphEnumRecords Peer Graphing. Funkcje PeerEnum tworzą wyliczenie i zwracają dojście do tej wyliczenia do aplikacji wywołującej. Ten uchwyt musi być używany do pobierania wyników.

  2. Opcjonalnie uzyskaj liczbę jednostek w wyliczenie. Wywołaj funkcję GetItemCount, na przykład wywołaj PeerGraphGetItemCount lub PeerGetItemCount.

    Nuta

    Możesz użyć wartości zwracanej przez funkcję GetItemCount, aby określić liczbę dostępnych elementów do pobrania.

     

  3. Pobierz grupę wyników. Wywołaj funkcję GetNextItem, na przykład wywołaj PeerGraphGetNextItem.

    Nuta

    Gdy aplikacja wywołuje funkcję GetNextItem, określa liczbę jednostek do zwrócenia, a następnie funkcja zwraca wskaźnik do tablicy wskaźników do jednostek oraz liczbę jednostek, która jest zawsze mniejsza lub równa określonej liczbie. Aplikacja może wymagać wielokrotnego wywołania tej funkcji — dopóki liczba zwróconych jednostek nie będzie mniejsza niż żądana liczba.

     

  4. Gdy dane nie będą potrzebne, zwolnij wskaźnik do danych. Wywołaj funkcję FreeData, na przykład wywołaj PeerGraphFreeData lub PeerFreeData.

    Nuta

    Aby uzyskać więcej informacji, zobacz zwalnianie danych równorzędnych.

     

  5. Gdy aplikacja nie potrzebuje dojścia do wyliczenia, zwolnij ją. Wywołaj funkcję endEnumeration, na przykład wywołaj PeerEndEnumeration lub PeerGraphEndEnumeration.

Przykład wyliczenia

Poniższy fragment kodu pokazuje, jak wyliczać dostępne tożsamości.

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