Közvetlen kapcsolatok
A társgráfolási és társcsoport-csoportosítási infrastruktúrák lehetővé teszik az alkalmazások számára, hogy közvetlenül egy csomóponthoz (gráfozáshoz) vagy taghoz (csoportosításhoz) csatlakozzanak, majd közvetlenül a csomóponttal cseréljenek adatokat. Ezt a kapcsolatot közvetlen kapcsolatnak nevezzük.
Közvetlen kapcsolatok a társgráfolási infrastruktúrával
Mielőtt közvetlen kapcsolatot létesítenének egy gráf két csomópontja között, mindkét csomópontot regisztrálni kell a PEER_GRAPH_EVENT_DIRECT_CONNECTION eseményhez. Ha közvetlen kapcsolaton keresztül szeretne adatokat fogadni, a csomópontokat is regisztrálni kell a PEER_GRAPH_EVENT_INCOMING_DATA eseményhez.
PEER_GRAPH_EVENT_DIRECT_CONNECTION egy olyan esemény, amely értesíti az alkalmazást, hogy egy közvetlen kapcsolati kísérlet sikeres vagy sikertelen-e. A PeerGraphOpenDirectConnection hívásának tényleges sikeres vagy sikertelen állapota a PEER_GRAPH_EVENT_DATA struktúrában lesz visszaadva.
Közvetlen kapcsolat létrehozásához egy alkalmazás meghívja PeerGraphOpenDirectConnection, majd átad egy fogópontot a gráfnak, egy mutatót a kapcsolatban részt vevő másik csomópont identitására, és egy mutatót a résztvevő csomópont IPv6-címstruktúrájára. A PeerGraphOpenDirectConnection hívásában megadott csomóponti identitást és IPv6-címet regisztrálni kell a PEER_GRAPH_EVENT_INCOMING_DATA eseményhez, vagy nem fogadhat hívó társ által küldött adatokat. Ha sikeres, PeerGraphOpenDirectConnection egy 64 bites kapcsolatazonosítót ad vissza. A társnak azonban várnia kell a PEER_GROUP_EVENT_DIRECT_CONNECTION eseményre, mielőtt a közvetlen kapcsolatazonosító érvényesként azonosítható lenne.
A kapcsolat létrejötte és az érvényes kapcsolatazonosító megerősítése után az alkalmazás meghívhatja PeerGraphSendData, hogy az érvényes kapcsolatazonosító által megadott kapcsolaton keresztül küldje el az adatokat a résztvevő társnak – ha a résztvevő társ regisztrálva van a PEER_GRAPH_EVENT_INCOMING_DATA eseményre. Az átlátszatlan adatok PEER_DATA szerkezetként érhetők el a PEER_GRAPH_EVENT_INCOMING_DATA esemény által visszaadott PEER_EVENT_INCOMING_DATA.
Ha nincs szükség kapcsolatra, egy alkalmazás meghívja PeerGraphCloseDirectConnection a gráffogóponttal és a kapcsolatazonosítóval.
Közvetlen kapcsolatok a társcsoportozási infrastruktúrával
A társcsoportozási infrastruktúrán belüli közvetlen kapcsolatokat a társgráfozási infrastruktúrához hasonlóan kezeli a rendszer.
Mielőtt közvetlen kapcsolatot létesítenének a csoport két tagja között, mindkét tagnak regisztrálnia kell a PEER_GROUP_EVENT_DIRECT_CONNECTION eseményre. Ha egy csoporttag közvetlen kapcsolaton keresztül szeretne adatokat fogadni, a csoporttagnak regisztrálnia kell a PEER_GROUP_EVENT_INCOMING_DATA eseményre is.
PEER_GROUP_EVENT_DIRECT_CONNECTION olyan esemény, amely értesíti az alkalmazást, hogy sikeres vagy sikertelen-e a közvetlen kapcsolati kísérlet. A PeerGroupOpenDirectConnection hívásának tényleges sikeres vagy sikertelen állapota a PEER_GROUP_EVENT_DATA struktúrában lesz visszaadva.
Közvetlen kapcsolat létrehozásához egy alkalmazás meghívja PeerGroupOpenDirectConnection, majd átad egy fogópontot a csoportnak, egy mutatót a kapcsolatban részt vevő másik tag identitására, és egy mutatót a résztvevő tag IPv6-címstruktúrájára. Az a tag, akinek identitását és IPv6-címét a PeerGroupOpenDirectConnection hívásában meg van adva, regisztrálni kell a PEER_GROUP_EVENT_INCOMING_DATA eseményhez, vagy a tag nem fogadhat hívó társ által küldött adatokat. PeerGroupOpenDirectConnection 64 bites kapcsolatazonosítót ad vissza, ha sikeres. A társnak azonban meg kell várnia, amíg a PEER_GRAPH_EVENT_DIRECT_CONNECTION esemény elő nem kerül, mielőtt a közvetlen kapcsolatazonosító érvényesként azonosítható lenne.
A kapcsolat létrejötte és az érvényes kapcsolatazonosító megerősítése után az alkalmazás meghívhatja PeerGroupSendData, hogy az érvényes kapcsolatazonosító által megadott kapcsolaton keresztül küldjön adatokat a résztvevő társnak – ha a résztvevő társ regisztrálva van a PEER_GROUP_EVENT_INCOMING_DATA eseményre. Az átlátszatlan adatok PEER_DATA szerkezetként érhetők el a PEER_GROUP_EVENT_INCOMING_DATA esemény által visszaadott PEER_EVENT_INCOMING_DATA.
Ha nincs szükség a kapcsolatra, az alkalmazás meghívja PeerGroupCloseDirectConnection a csoportleíróval és a kapcsolatazonosítóval.
Példa közvetlen kapcsolatra a graphinghoz
#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;
}