Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Les infrastructures peer graphing et peer grouping permettent aux applications de se connecter directement à un nœud (Graphing) ou à un membre (regroupement), puis d’échanger des données directement avec le nœud. Cette connexion est appelée connexion directe.
Connexions directes à l’aide de l’infrastructure peer graphing
Avant de pouvoir établir une connexion directe entre deux nœuds dans un graphique, les deux nœuds doivent être inscrits pour l’événement PEER_GRAPH_EVENT_DIRECT_CONNECTION. Pour recevoir des données via une connexion directe, les nœuds doivent également être inscrits pour l’événement PEER_GRAPH_EVENT_INCOMING_DATA.
PEER_GRAPH_EVENT_DIRECT_CONNECTION est un événement qui avertit une application si une tentative de connexion directe réussit ou échoue. L’état réel de réussite ou d’échec d’un appel à PeerGraphOpenDirectConnection est retourné dans la structure PEER_GRAPH_EVENT_DATA.
Pour créer une connexion directe, une application appelle PeerGraphOpenDirectConnection, puis passe un handle au graphique, un pointeur vers l’identité de l’autre nœud participant à la connexion et un pointeur vers une structure d’adresses IPv6 pour le nœud participant. L’identité de nœud et l’adresse IPv6 spécifiées dans l’appel à PeerGraphOpenDirectConnection doivent être inscrites pour l’événement PEER_GRAPH_EVENT_INCOMING_DATA, ou elles ne peuvent pas recevoir les données envoyées par un homologue appelant. En cas de réussite, PeerGraphOpenDirectConnection retourne un ID de connexion 64 bits. Toutefois, l’homologue doit attendre l’événement PEER_GROUP_EVENT_DIRECT_CONNECTION avant que l’ID de connexion directe puisse être identifié comme valide.
Une fois qu’une connexion est établie et qu’un ID de connexion valide est confirmé, une application peut appeler PeerGraphSendData pour envoyer les données sur la connexion spécifiée par l’ID de connexion valide à l’homologue participant, si l’homologue participant est inscrit pour l’événement PEER_GRAPH_EVENT_INCOMING_DATA. Les données opaques sont disponibles sous la forme d’une structure PEER_DATA dans la PEER_EVENT_INCOMING_DATA retournée par l’événement PEER_GRAPH_EVENT_INCOMING_DATA.
Lorsqu’une connexion n’est pas nécessaire, une application appelle PeerGraphCloseDirectConnection avec le handle de graphique et l’ID de connexion.
Connexions directes à l’aide de l’infrastructure de regroupement d’homologues
Les connexions directes au sein de l’infrastructure de regroupement d’homologues sont gérées de la même façon que l’infrastructure peer graphing.
Avant de pouvoir établir une connexion directe entre deux membres d’un groupe, les deux membres doivent s’inscrire à l’événement PEER_GROUP_EVENT_DIRECT_CONNECTION. Si un membre de groupe souhaite recevoir des données via une connexion directe, le membre du groupe doit également s’inscrire à l’événement PEER_GROUP_EVENT_INCOMING_DATA.
PEER_GROUP_EVENT_DIRECT_CONNECTION est un événement qui est un événement qui avertit une application si une tentative de connexion directe réussit ou échoue. L’état réel de réussite ou d’échec d’un appel à PeerGroupOpenDirectConnection est retourné dans la structure PEER_GROUP_EVENT_DATA.
Pour créer une connexion directe, une application appelle PeerGroupOpenDirectConnection, puis transmet un handle au groupe, un pointeur vers l’identité de l’autre membre qui participera à cette connexion et un pointeur vers une structure d’adresses IPv6 pour le membre participant. Membre dont l’identité et l’adresse IPv6 sont spécifiées dans l’appel à PeerGroupOpenDirectConnection doivent être inscrits pour l’événement PEER_GROUP_EVENT_INCOMING_DATA, ou le membre ne peut pas recevoir les données envoyées par un homologue appelant. PeerGroupOpenDirectConnection retourne un ID de connexion 64 bits en cas de réussite. Toutefois, un homologue doit attendre que l’événement de PEER_GRAPH_EVENT_DIRECT_CONNECTION soit déclenché avant que l’ID de connexion directe puisse être identifié comme valide.
Une fois qu’une connexion est établie et qu’un ID de connexion valide est confirmé, une application peut appeler PeerGroupSendData pour envoyer des données sur une connexion spécifiée par l’ID de connexion valide à l’homologue participant, si l’homologue participant est inscrit pour l’événement PEER_GROUP_EVENT_INCOMING_DATA. Les données opaques sont disponibles sous la forme d’une structure PEER_DATA dans la PEER_EVENT_INCOMING_DATA retournée par l’événement de PEER_GROUP_EVENT_INCOMING_DATA.
Lorsque la connexion n’est pas nécessaire, l’application appelle PeerGroupCloseDirectConnection avec le handle de groupe et l’ID de connexion.
Exemple de connexion directe pour la graphe
#include <p2p.h>
#pragma comment(lib, "p2pgraph.lib")
//-----------------------------------------------------------------------------
// Function: CreateDirectConnection
//
// Purpose: Demonstrate how to create a direct connection.
//
// Arguments:
// hGraph - the graph in which to create the connection
// pwzId - the peer identification string
//
// Returns: ULONGLONG - the connection id or 0
//
ULONGLONG CreateDirectConnection(HGRAPH hGraph, PCWSTR pwzId)
{
HRESULT hr = S_OK;
ULONGLONG ullConnection = 0; // the connection id to return
HPEERENUM hPeerEnum = NULL;
hr = PeerGraphEnumNodes(hGraph, pwzId, &hPeerEnum);
if (SUCCEEDED(hr))
{
ULONG cItem = 1; // want only one matching result
PEER_NODE_INFO ** ppNodeInfo = NULL;
hr = PeerGraphGetNextItem(hPeerEnum, &cItem, (PVOID**) &ppNodeInfo);
if (SUCCEEDED(hr))
{
if ((cItem > 0) && (NULL != ppNodeInfo))
{
if ((*ppNodeInfo)->cAddresses > 0)
{
hr = PeerGraphOpenDirectConnection(hGraph, pwzId,
&(*ppNodeInfo)->pAddresses[0], &ullConnection);
}
PeerGraphFreeData(ppNodeInfo);
}
}
PeerGraphEndEnumeration(hPeerEnum);
}
return ullConnection;
}