Megosztás a következőn keresztül:


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