Öyleyse çocuklar, şimdi ilk olarak abonelik sürecinin uygulanmasıyla başlayalım, değil mi?
Abone, bir veri kaynağının belirli bir girişine olan ilgisini bu şekilde ifade edecekti.
Böylece abonelik süreci bir fonksiyon tarafından uygulanacaktır.
Bildirim için sağ masa kaydı.
Bu fonksiyonun bir abone tarafından çağrılması beklenir ve abone bu fonksiyonu kullanarak abonenin bildirim
için ilgilendiği bir yönlendirme tablosunun belirli bir girişinde bir bildirim zinciri girişi oluşturur.
Değil mi?
Dolayısıyla, abone bu API'yi kullanırsa, bildirim zinciri öğelerinin ilgilenilen bir girişle ilişkili
belirli bir bildirim zincirinde oluşturulacağını görebilirsiniz.
Dolayısıyla bu API'nin RTC dosyasında uygulanması ve eklenmesi gerekir.
Şimdi bu API'nin uygulamasını görelim.
Gördüğünüz gibi nokta C dosyasındayım ve bu fonksiyonun prototipini attach dosyasında belirtmeniz
gerekiyor.
Değil mi?
Gördüğünüz gibi, bu API beş argüman kabul ediyor, değil mi?
İlk bağımsız değişken yayıncının yönlendirme tablosuna bir işaretçidir.
İkinci bağımsız değişken, yönlendirme tablosundaki bir girişi benzersiz bir şekilde tanımlayan bir anahtardır.
Üçüncü bağımsız değişken anahtarın boyutudur.
Dördüncü bağımsız değişken, yayıncı veri kaynağını her güncellediğinde abonenin bilgilendirilmesi gereken
fonksiyona bir işaretçidir.
Ve bu API'nin son argümanı, aboneyi benzersiz bir şekilde tanımlayan benzersiz kimliktir.
Doğru.
Şimdi aboneliğin nasıl yapılabileceğini görelim.
Bu API'nin uygulanmasına başlamak için, öncelikle yönlendirme tablosunda ilgili yönlendirme
tablosu girişini arayacağız.
Değil mi?
Yani, abonenin bildirim için ilgi gösterdiği yönlendirme tablosu girişini yönlendirme
tablosunda arıyoruz.
Şimdi, böyle bir girişin yönlendirme tablosunda hiç bulunmaması mümkün olabilir.
Yayıncının yönlendirme tablosunda henüz böyle bir yönlendirme tablosu girişi oluşturmamış olması mümkün
olabilir.
Ancak böyle bir girişe bildirimler için ilgi gösteren bir abone geliyor.
Bu durumda yapacağımız şey, API'yi kullanarak yönlendirme tablosunda ekleme veya güncelleme
için bir yönlendirme tablosu girişi oluşturmak olacaktır.
Ancak bu yönlendirme tablosu girişinin veri kısmının boş olduğunu görebilirsiniz, değil mi?
Veri kısmı boştur çünkü bu yönlendirme tablosu girişinin neyle ilgili olduğunu belirtecek bir verimiz yoktur.
Bu yönlendirme tablosu girişini yönlendirme tablosunda oluşturuyoruz, böylece aboneler daha sonra yayıncı bu yönlendirme
tablosu girişini gerçek verilerle oluşturduğunda bu yönlendirme tablosu girişiyle ilişkilendirilebilir.
O zaman bu yönlendirme tablosu girişiyle ilişkili tüm aboneler bilgilendirilecektir, değil mi?
Bu yüzden, yeni bir yönlendirme tablosu girişi oluşturup oluşturmadığımızı takip eden bir Boolean değişkeni
aldık.
Değil mi?
Bu fonksiyonun abone tarafından çağrıldığını unutmayın, bu nedenle yönlendirme tablosu girişinin
aboneden gelen abonelik talebi nedeniyle oluşturulduğu ve bu yönlendirme tablosu girişini oluşturanın
yayıncı olmadığı anlamına gelir.
Doğru.
Şimdi ilerleyerek yönlendirme tablosu girişinin oluşturulduğunu varsayalım.
Yapacağımız bir sonraki şey, bir bildirim zinciri öğesi, veri yapısı almak
ve onu başlatmak ve ardından belirtmektir.
Bu bildirim zinciri elemanındaki abonenin özellikleri.
Şimdi abonenin özellikleri nelerdir?
Abone kimliği ve aboneye bildirim göndermek için kullanılacak fonksiyonun işaretçisi?
Doğru.
Bunun dışında, bildirim zinciri öğesi bir anahtarın yanı sıra anahtar boyutunu da içerir.
Ancak bu durumda, bildirim zinciri öğesinin anahtarının yanı sıra anahtar boyutunu da doldurmaya kesinlikle
gerek yoktur.
Bunun nedeni, bildirim zincirlerinin bu yönlendirme tablosunun her bir girişiyle ilişkili olduğunu görebilmenizdir.
Değil mi?
Anahtarın kendisi yönlendirme tablosu girişinde saklanır.
Doğru.
Dolayısıyla, bu anahtarları bu bireysel bildirim zinciri öğelerinde saklamaya kesinlikle gerek yoktur,
değil mi?
Eğer böyle yaparsanız, bu gereksiz bir görev olacaktır.
Dolayısıyla, anahtarlar yönlendirme tablosu girişinde zaten mevcut olduğundan, bu bireysel bildirim zinciri
öğelerinde anahtar tutmaya gerek yoktur.
Doğru.
Yani burada çifte şey yapmaya gerek yok.
İşte bu nedenle kaçtım.
Anahtarların ve anahtar boyutunun bildirim zinciri öğesinde saklanması.
Doğru.
Ve bildirim zinciri öğesini hazırladıktan sonra, bildirim zinciri kaydını çağırmamız yeterlidir.
NotIf dot c dosyasında uygulanan çekirdek bir API olan bildirim zinciri API'si.
Ve bu API, bu bildirim zinciri öğesini bildirim zincirine kaydetmeye özen gösterecektir.
Şimdi, bu API'nin ilk argümanının, ilgili yönlendirme tablosu girişiyle ilişkili bildirim zincirine
bir işaretçi olduğuna dikkat edin.
Değil mi?
Yani temelde yapmaya çalıştığımız şey, bildirim zincirine ilgili girişle ilişkili bir
bildirim zinciri öğesi eklemektir, Doğru.
Yani burada yaptığımız şey bu.
Ve son olarak, yapacağımız şey, eğer bu yönlendirme tablosu girişi abone tarafından yeni oluşturulmadıysa, bu yönlendirme tablosu
girişinin yönlendirme tablosunda zaten mevcut olduğu anlamına gelir, o zaman derhal
aboneye bu yönlendirme tablosu girişi hakkında bildirim göndermektir.
Doğru.
Şimdi, aboneye bildirim gönderdiğinizde, abone geri arama işlevini çağırmanız gerektiğini
unutmayın, değil mi?
Şimdi, bu geri arama fonksiyonunun ilk argümanı abonenin ilgilendiği yönlendirme tablosu
girişine bir işaretçidir.
Doğru.
Yönlendirme tablosunun işaretçisini, girişini aboneye verelim ve abonenin bu yönlendirme tablosu girişiyle ne yapmak
istediğine karar vermesine izin verelim.
Doğru.
Yayıncının veya veri kaynağının görevi, aboneye, hey, bu sizin ilgilendiğiniz yönlendirme tablosu
girdisidir, mesajını iletmektir.
Yani burada, abone zaten var olan yönlendirme tablosu girişine abone olur olmaz,
Opcode NFC add ile aboneye hemen bildirim gönderin.
Doğru.
Abone yönlendirme tablosunda zaten var olan bir girdiye abone olduysa, aboneye yönlendirme
tablosundaki bu girdi hakkında derhal bilgi verilmelidir.
Bizim burada yaptığımız da bu.
Böylece bu fonksiyonun uygulaması tamamlanmış olur.
Ve bu fonksiyonun abone tarafından bildirim için yönlendirme tablosu girişlerine olan ilgilerini ifade
etmek üzere çağrılması gerekir.
Dolayısıyla, bu işlevin uygulanmasının oldukça basit ve anlaşılır olduğunu görebilirsiniz.