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
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.
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.
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.
Dopo che i dati non sono necessari, liberare il puntatore ai dati. Chiamare una funzione FreeData , ad esempio, chiamare PeerGraphFreeData o PeerFreeData.
Nota
Per altre informazioni, vedere Freeing Peer Data.For more information, see Freeing Peer Data.
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;
}