Bagikan melalui


Koneksi Langsung

Peer Graphing dan Peer Grouping Infrastructures memungkinkan aplikasi untuk terhubung langsung ke satu node (Grafik) atau anggota (Pengelompokan), lalu bertukar data langsung dengan simpul. Koneksi ini disebut koneksi langsung .

Koneksi Langsung menggunakan Infrastruktur Grafik Serekan

Sebelum koneksi langsung dapat dibuat antara dua simpul dalam grafik, kedua simpul harus didaftarkan untuk peristiwa PEER_GRAPH_EVENT_DIRECT_CONNECTION. Untuk menerima data melalui koneksi langsung, simpul juga harus didaftarkan untuk peristiwa PEER_GRAPH_EVENT_INCOMING_DATA.

PEER_GRAPH_EVENT_DIRECT_CONNECTION adalah peristiwa yang memberi tahu aplikasi apakah upaya koneksi langsung berhasil atau gagal. Status keberhasilan atau kegagalan aktual panggilan ke PeerGraphOpenDirectConnection dikembalikan dalam struktur PEER_GRAPH_EVENT_DATA.

Untuk membuat koneksi langsung, aplikasi memanggil PeerGraphOpenDirectConnection, lalu meneruskan handel ke grafik, penunjuk ke identitas simpul lain yang berpartisipasi dalam koneksi, dan penunjuk ke struktur alamat IPv6 untuk simpul yang berpartisipasi. Identitas simpul dan alamat IPv6 yang ditentukan dalam panggilan ke PeerGraphOpenDirectConnection harus didaftarkan untuk peristiwa PEER_GRAPH_EVENT_INCOMING_DATA, atau tidak dapat menerima data yang dikirim oleh serekan panggilan. Jika berhasil, PeerGraphOpenDirectConnection mengembalikan ID koneksi 64-bit. Namun, serekan harus menunggu peristiwa PEER_GROUP_EVENT_DIRECT_CONNECTION sebelum ID koneksi langsung dapat diidentifikasi sebagai valid.

Setelah koneksi dibuat dan ID koneksi yang valid dikonfirmasi, aplikasi dapat memanggilPeerGraphSendData untuk mengirim data di seluruh koneksi yang ditentukan oleh ID koneksi yang valid ke serekan yang berpartisipasi—jika rekan yang berpartisipasi terdaftar untuk acara PEER_GRAPH_EVENT_INCOMING_DATA. Data buram tersedia sebagai struktur PEER_DATA dalam PEER_EVENT_INCOMING_DATA yang dikembalikan oleh peristiwa PEER_GRAPH_EVENT_INCOMING_DATA.

Ketika koneksi tidak diperlukan, aplikasi memanggil PeerGraphCloseDirectConnection dengan handel grafik dan ID koneksi.

Koneksi Langsung menggunakan Infrastruktur Pengelompokan Serekan

Koneksi langsung dalam Infrastruktur Pengelompokan Serekan ditangani mirip dengan Infrastruktur Grafik Serekan.

Sebelum koneksi langsung dapat dibuat antara dua anggota dalam grup, kedua anggota harus mendaftar untuk peristiwa PEER_GROUP_EVENT_DIRECT_CONNECTION. Jika anggota grup ingin menerima data melalui koneksi langsung, anggota grup juga harus mendaftar untuk peristiwa PEER_GROUP_EVENT_INCOMING_DATA.

PEER_GROUP_EVENT_DIRECT_CONNECTION adalah peristiwa yang merupakan peristiwa yang memberi tahu aplikasi apakah upaya koneksi langsung berhasil atau gagal atau tidak. Status keberhasilan atau kegagalan aktual panggilan ke PeerGroupOpenDirectConnection dikembalikan dalam struktur PEER_GROUP_EVENT_DATA.

Untuk membuat koneksi langsung, aplikasi memanggil PeerGroupOpenDirectConnection, lalu meneruskan handel ke grup, penunjuk ke identitas anggota lain yang akan berpartisipasi dalam koneksi ini, dan penunjuk ke struktur alamat IPv6 untuk anggota yang berpartisipasi. Anggota yang identitas dan alamat IPv6nya ditentukan dalam panggilan ke PeerGroupOpenDirectConnection harus didaftarkan untuk peristiwa PEER_GROUP_EVENT_INCOMING_DATA, atau anggota tidak dapat menerima data yang dikirim oleh serekan panggilan. PeerGroupOpenDirectConnection mengembalikan ID koneksi 64-bit jika berhasil. Namun, serekan harus menunggu peristiwa PEER_GRAPH_EVENT_DIRECT_CONNECTION dinaikkan sebelum ID koneksi langsung dapat diidentifikasi sebagai valid.

Setelah koneksi dibuat dan ID koneksi yang valid dikonfirmasi, aplikasi dapat memanggil PeerGroupSendData untuk mengirim data di seluruh koneksi yang ditentukan oleh ID koneksi yang valid ke rekan yang berpartisipasi—jika rekan yang berpartisipasi terdaftar untuk peristiwa PEER_GROUP_EVENT_INCOMING_DATA. Data buram tersedia sebagai struktur PEER_DATA dalam PEER_EVENT_INCOMING_DATA yang dikembalikan oleh peristiwa PEER_GROUP_EVENT_INCOMING_DATA.

Ketika koneksi tidak diperlukan, aplikasi memanggil PeerGroupCloseDirectConnection dengan handel grup dan ID koneksi.

Contoh Koneksi Langsung untuk Grafik

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