Arsitektur Objek yang dapat Koneksi

Objek yang dapat dihubungkan hanyalah satu bagian dari arsitektur keseluruhan objek yang dapat dihubungkan. Teknologi ini mencakup elemen-elemen berikut:

Hubungan antara klien, objek yang dapat dihubungkan, titik koneksi, dan sink diilustrasikan dalam diagram berikut:

Diagram that shows the connection points between the Client and Connectable Object.

Sebelum objek titik koneksi memanggil metode di antarmuka sink di langkah 3 dalam diagram sebelumnya, itu harus QueryInterface untuk antarmuka tertentu yang diperlukan, bahkan jika pointer sudah diteruskan dalam langkah 2 panggilan ke metode Saran.

Dua objek enumerator juga terlibat dalam arsitektur ini meskipun tidak ditampilkan dalam ilustrasi. Satu dibuat oleh metode di I Koneksi ionPointContainer untuk menghitung titik koneksi dalam objek yang dapat dihubungkan. Yang lain dibuat oleh metode di I Koneksi ionPoint untuk menghitung koneksi yang saat ini dibuat ke titik koneksi tersebut. Satu titik koneksi dapat mendukung beberapa antarmuka sink yang terhubung, dan harus melakukan iterasi melalui daftar koneksi setiap kali melakukan panggilan metode pada antarmuka tersebut. Proses ini dikenal sebagai multicasting.

Saat bekerja dengan objek yang dapat dihubungkan, penting untuk dipahami bahwa objek yang dapat dihubungkan, setiap titik koneksi, setiap sink, dan semua enumerator adalah objek terpisah dengan implementasi IUnknown terpisah, jumlah referensi terpisah, dan masa pakai terpisah. Klien yang menggunakan objek ini selalu bertanggung jawab untuk merilis semua jumlah referensi yang dimilikinya.

Catatan

Objek yang dapat dihubungkan dapat mendukung lebih dari satu klien dan dapat mendukung beberapa sink dalam klien. Demikian juga, sink dapat dihubungkan ke lebih dari satu objek yang dapat dihubungkan.

 

Langkah-langkah untuk membuat koneksi antara klien dan objek yang dapat dihubungkan adalah sebagai berikut:

  1. Klien meminta I Koneksi ionPointContainer pada objek untuk menentukan apakah objek dapat dihubungkan. Jika panggilan ini berhasil, klien memegang penunjuk ke antarmuka I Koneksi ionPointContainer pada objek yang dapat dihubungkan dan penghitung referensi objek yang dapat dihubungkan telah bertahap. Jika tidak, objek tidak dapat dihubungkan dan tidak mendukung antarmuka keluar.
  2. Jika objek dapat dihubungkan, klien selanjutnya mencoba mendapatkan penunjuk ke antarmuka I Koneksi ionPoint pada titik koneksi dalam objek yang dapat dihubungkan. Ada dua metode untuk mendapatkan pointer ini, baik di I Koneksi ionPointContainer::Find Koneksi ionPoint dan di I Koneksi ionPointContainer::Enum Koneksi ionPoints. Ada beberapa langkah tambahan yang diperlukan jika Enum Koneksi ionPoints digunakan. (Lihat Menggunakan I Koneksi ionPointContainer untuk informasi selengkapnya.) Jika berhasil, objek yang dapat dihubungkan dan klien mendukung antarmuka keluar yang sama. Objek yang dapat dihubungkan mendefinisikannya dan memanggilnya, dan klien mengimplementasikannya. Klien kemudian dapat berkomunikasi melalui titik koneksi dalam objek yang dapat dihubungkan.
  3. Klien kemudian memanggil Advise pada titik koneksi untuk membuat koneksi antara antarmuka sink dan titik koneksi objek. Setelah panggilan ini, titik koneksi objek menyimpan penunjuk ke antarmuka keluar di sink.
  4. Kode di dalam Advise memanggil QueryInterface pada penunjuk antarmuka yang diteruskan, meminta pengidentifikasi antarmuka tertentu yang disambungkannya.
  5. Objek memanggil metode pada antarmuka sink sesuai kebutuhan, menggunakan pointer yang dipegang oleh titik koneksinya.
  6. Klien memanggil Unadvise untuk mengakhiri koneksi. Kemudian klien memanggil I Koneksi ionPoint::Release untuk membebaskan penangguhannya pada titik koneksi dan, oleh karena itu, objek utama yang dapat dihubungkan juga. Klien juga harus memanggil I Koneksi ionPointContainer::Release untuk membebaskan penangguhannya pada objek utama yang dapat dihubungkan.

Antarmuka Objek yang Dapat Koneksi