Aracılığıyla paylaş


Doğrudan Bağlantılar

Eşleme Grafı ve Eşleme Gruplandırma Altyapıları, uygulamaların doğrudan bir düğüme (Grafik oluşturma) veya üyeye (Gruplandırma) bağlanmasını ve ardından düğümle doğrudan veri alışverişinde bulunmasını sağlar. Bu bağlantı, doğrudan bağlantı olarak adlandırılır.

Eş Graf Altyapısını Kullanarak Doğrudan Bağlantılar

Bir grafikteki iki düğüm arasında doğrudan bağlantı kurulabilmesi için her iki düğümün de PEER_GRAPH_EVENT_DIRECT_CONNECTION olayı için kaydedilmesi gerekir. Doğrudan bağlantı üzerinden veri almak için düğümlerin PEER_GRAPH_EVENT_INCOMING_DATA olayına da kaydedilmesi gerekir.

PEER_GRAPH_EVENT_DIRECT_CONNECTION, bir uygulamaya doğrudan bağlantı girişiminin başarılı veya başarısız olup olmadığını bildiren bir olaydır. PeerGraphOpenDirectConnection çağrısının gerçek başarı veya başarısızlık durumu PEER_GRAPH_EVENT_DATA yapısında döndürülür.

Bir uygulama doğrudan bağlantı oluşturmak için PeerGraphOpenDirectConnectionçağırır ve ardından grafiğe bir tanıtıcı, bağlantıya katılan diğer düğümün kimliğine yönelik bir işaretçi ve katılan düğüm için IPv6 adres yapısına yönelik bir işaretçi geçirir. PeerGraphOpenDirectConnection çağrısında belirtilen düğüm kimliği ve IPv6 adresiPEER_GRAPH_EVENT_INCOMING_DATA olayı için kayıtlı olmalıdır, aksi durumda çağıran eş tarafından gönderilen verileri alamaz. Başarılı olduğunda, PeerGraphOpenDirectConnection 64 bit bağlantı kimliği döndürür. Ancak, doğrudan bağlantı kimliğinin geçerli olarak tanımlanabilmesi için önce eş PEER_GROUP_EVENT_DIRECT_CONNECTION olayını beklemesi gerekir.

Bir bağlantı yapıldıktan ve geçerli bir bağlantı kimliği onaylandıktan sonra, bir uygulama PeerGraphSendData çağırarak, katılan eş PEER_GRAPH_EVENT_INCOMING_DATA olayı için kayıtlıysa, geçerli bağlantı kimliği tarafından belirtilen bağlantıdaki verileri katılan eşe gönderebilir. Opak veriler, PEER_GRAPH_EVENT_INCOMING_DATA olayı tarafından döndürülen PEER_EVENT_INCOMING_DATAPEER_DATA bir yapı olarak kullanılabilir.

Bir bağlantı gerekli olmadığında, uygulama graf tutamacı ve bağlantı kimliğiyle PeerGraphCloseDirectConnection çağırır.

Eşleme Gruplandırma Altyapısını Kullanarak Doğrudan Bağlantılar

Eş Gruplandırma Altyapısı içindeki doğrudan bağlantılar, Eş Graf Altyapısına benzer şekilde işlenir.

Bir gruptaki iki üye arasında doğrudan bağlantı kurulabilmesi için her iki üyenin de PEER_GROUP_EVENT_DIRECT_CONNECTION olayına kaydolması gerekir. Bir grup üyesi doğrudan bağlantı üzerinden veri almak istiyorsa, grup üyesinin PEER_GROUP_EVENT_INCOMING_DATA olayına da kaydolması gerekir.

PEER_GROUP_EVENT_DIRECT_CONNECTION, doğrudan bağlantı girişiminin başarılı veya başarısız olup olmadığını uygulamaya bildiren bir olaydır. PeerGroupOpenDirectConnection çağrısının gerçek başarı veya başarısızlık durumu PEER_GROUP_EVENT_DATA yapısında döndürülür.

Doğrudan bağlantı oluşturmak için, bir uygulama PeerGroupOpenDirectConnectionçağırır ve ardından gruba bir tanıtıcı, bu bağlantıya katılacak diğer üyenin kimliğine yönelik bir işaretçi ve katılan üye için bir IPv6 adres yapısına yönelik bir işaretçi geçirir. PeerGroupOpenDirectConnection çağrısında kimliği ve IPv6 adresi belirtilen üyePEER_GROUP_EVENT_INCOMING_DATA olayı için kayıtlı olmalıdır, aksi durumda üye bir çağrı eş tarafından gönderilen verileri alamaz. PeerGroupOpenDirectConnection başarılı olduğunda 64 bit bağlantı kimliği döndürür. Ancak, doğrudan bağlantı kimliğinin geçerli olarak tanımlanabilmesi için bir eş PEER_GRAPH_EVENT_DIRECT_CONNECTION olayının tetiklanmasını beklemelidir.

Bir bağlantı yapıldıktan ve geçerli bir bağlantı kimliği onaylandıktan sonra, bir uygulama PeerGroupSendData çağırarak, katılan eş PEER_GROUP_EVENT_INCOMING_DATA olay için kayıtlıysa, geçerli bağlantı kimliği tarafından belirtilen bir bağlantı üzerinden katılan eşe veri gönderebilir. Opak veriler, PEER_GROUP_EVENT_INCOMING_DATA olayı tarafından döndürülen PEER_EVENT_INCOMING_DATAPEER_DATA bir yapı olarak kullanılabilir.

Bağlantı gerekli olmadığında, uygulama grup tanıtıcısı ve bağlantı kimliğiyle PeerGroupCloseDirectConnection çağırır.

Grafik Oluşturma için Doğrudan Bağlantı Örneği

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