Şimdi Publisher C'nin uygulamasını tamamladığımıza göre, şimdi devam edelim ve abonelerimizi
uygulayalım.
Bu nedenle aboneler, iş parçacıklı abone nokta C dosyasında uygulanacaktır.
Bu dosyanın yapısının uygulamamız gereken üç fonksiyondan oluştuğunu görebilirsiniz.
İlk işlev abone iş parçacığı oluşturmaktır, değil mi?
Ve bu fonksiyonun main fonksiyonu tarafından çağrılacağını zaten görmüştük.
Ve bu işlevin amacı bir abone dizisi oluşturmak, değil mi?
Abone iş parçacığı işlevinde.
Tek yapmamız gereken, abonemizin yayıncının sahip olduğu yönlendirme tablosunun bazı rastgele girişlerine
abone olmasını sağlamaktır.
Doğru.
Dolayısıyla, abone iş parçacığı işlevi olan bu işlevde, abonemizin yayıncının yönlendirme tablosunun bazı
girdileriyle abone olmasına izin vereceğiz.
Ve görebileceğiniz üçüncü işlev test alt çizgi CB yani test geri arama işlevidir.
Şimdi bu aboneye ait olan fonksiyondur ve bu fonksiyon yayıncı bildirim zincirleri tarafından aboneye yönlendirme
tablosu girişinin herhangi bir güncellemesini bildirmek için çağrılacaktır.
Böylece aboneler test geri arama işlevi olan bu işlev aracılığıyla bilgilendirilir.
Doğru.
Dolayısıyla, yayıncının abonelere güncellemeler hakkında bildirim göndermek için bir araç olarak kullandığı
bu geri arama işlevidir.
Öyleyse iş parçacıklı abone C'yi uygulayalım.
Öncelikle, dosya iş parçacıklı abonelerin uygulanması ile başlayalım.
Bu dosyada ekli olan yönlendirme tablosu API'sini eklemeniz gerektiğini görebilirsiniz ve bu işlevi RTM yayıncıları
dosyasından içe aktarabilirsiniz çünkü abonenin güncellemeler için girişlere abone olmak için
yayıncının sahip olduğu yönlendirme tablosuna erişmesi gerekir.
Doğru.
Yani bu, uygulayacağımız bir işlevdir.
Bu fonksiyonun argümanının istemci kimliğini temsil eden bir tamsayı olduğunu görebilirsiniz, bu nedenle her abone iş parçacığı
bu sayı ile benzersiz bir şekilde tanımlanır.
Bu müşteri kimliği, değil mi?
Dolayısıyla bu fonksiyonda tek yapmamız gereken abone iş parçacığı adı verilen bir iş parçacığı oluşturmaktır.
Yine, müstakil modda bir abone iş parçacığı oluşturacağız ve bir abone iş parçacığı oluşturmak için basitçe
bir API iş parçacığı, alt çizgi oluşturma çağıracağız.
Şimdi bu, bir abone iş parçacığı bağlamında çağrılacak olan bir abone iş parçacığı işlevidir.
Evet arkadaşlar, şimdi abone iş parçacığı işlevinin uygulanmasını tartışalım.
Dolayısıyla, bu abone iş parçacığı işlevinde, bir abone iş parçacığının yayıncının yönlendirme tablosunun bazı rastgele
girdilerine abone olmasına izin vereceğiz.
Doğru.
Peki bunu nasıl yapabiliriz?
Bu yüzden öncelikle yönlendirme tablosunun anahtarlarını temsil eden veri yapısını kullanmanız gerekir.
Dolayısıyla, giriş anahtarlarımız dot h başlık dosyasında tanımlanan bir veri yapısıdır ve basitçe bir yönlendirme tablosu
girişinin hedef ve maske değerinin bir kombinasyonudur.
Değil mi?
Abone, hangi yönlendirme tablosu girdisine abone olmak istediğini belirtmek için bir anahtara ihtiyaç duyar.
Ardından bu anahtarları bazı rastgele değerlerle doldurun.
Diyelim ki 122'yi seçtim. 1 . 1. 1 ve seçtiğim maske değeri 32'dir.
Doğru.
Ve abone bildirim için API'yi veya tablo kaydını çağırır.
Şimdi, bu API'yi henüz uygulamadık.
Bu API, T veya C'nin hiçbir yerinde mevcut değildir.
Bu API'nin uygulanmasını henüz tartışmadık.
Bu yüzden şimdilik bu API'nin çağrılmasını yorumlayabilirsiniz.
Değil mi?
Bu API'nin uygulanmasını bir sonraki ders videosunda tartışacağız, ancak burada
abonenin yayıncının sahip olduğu bir yönlendirme tablosunun belirli bir yönlendirme tablosu girişine kaydolmak için bu API'yi kullandığını
görebilirsiniz.
Yani ilk argüman yayıncıların yönlendirme tablosunun işaretçisidir.
İkinci bağımsız değişken, abonenin ilgilendiği yönlendirme tablosundaki benzersiz bir girişi tanımlar.
Üçüncü bağımsız değişken anahtarın boyutudur.
Yani buradaki anahtarın boyutu hiçbir şey değildir, sadece bu veri yapısının boyutudur.
Üçüncü bağımsız değişken, yayıncının aboneye güncellemeleri bildirmek için çağıracağı geri
arama işlevine bir işaretçidir.
Bu fonksiyonun uygulanmasını kısa bir süre sonra tartışacağız.
Son bağımsız değişken ise abone tanımlayıcısıdır.
Dediğim gibi, her abone dizisi bir tamsayı değeriyle benzersiz bir şekilde tanımlanır, değil mi?
Bu tamsayı değeri, yayıncının hangi abonenin hangi yönlendirme tablosu girdilerine abone olduğunu belirlemesine
yardımcı olacaktır.
Doğru.
Eğer iş parçacığı alt çizgi oluşturma API'sinden fark ettiyseniz, istemci kimliğini abone iş parçacığı işlevine bir
argüman olarak aktarmıştık.
Doğru.
Yani aktardığınız değer bu değerdir ve bu değer hiçbir şey değildir, ancak sadece işaretsiz bir tamsayı değeridir.
Değil mi?
Böylece, yayıncı bu belirli girişi güncellediğinde veya abonenin bilgilendirilmesi gerektiğinde, abonemizi
yönlendirme tablosunun bir girişine kaydolma tehdidi haline getirdik.
Öyleyse abonemizi yönlendirme tablosunun daha fazla girişine abone yapalım.
İki kayıt daha yapalım, tamam mı?
Ve son olarak, abone iş parçacığınızın sonlanmaması için POS sistem çağrısını çağırın.
Değil mi?
Abone iş parçacığımızın bu POS sistem çağrısında durmasını sağlayalım.
Bu nedenle, programı derlemek için, bildirim için r t table register olan bu fonksiyona yapılan çağrıyı
yorumladığınızdan emin olun.
Bu fonksiyonun uygulanmasını bir sonraki ders videosunda tartışacağız.
Ancak şimdi, yayıncı tarafından abonelere bildirimde bulunmak için kullanılan işlev olan bu test geri arama
işlevine geliyoruz.
Ve son olarak, bu test geri arama işlevi aboneye ait olan ancak bildirim zincirleri aracılığıyla
yayıncı tarafından çağrılacak bir işlevdir.
Şimdi bu fonksiyonun uygulanmasını tartışalım.
Öncelikle, bu fonksiyonun prototipi veya imzası ne olmalıdır?
Dolayısıyla, bu işlevin prototipi veya imzası, bildirim zincirleri tarafından tanımlanan geri arama
işlevlerinin prototipiyle eşleşmelidir.
Dolayısıyla, notify dot h başlık dosyasında bu işlev işaretçisini belirtmiş olmanız gerekir.
Değil mi?
Dolayısıyla, test geri arama işlevinin prototipi bu işlev işaretçisi ile tamamen aynı olmalıdır.
Doğru.
Böylece %800'ün eşleştiğini görebilirsiniz.
Yani tamamen aynı olduğunu görebilirsiniz.
Ve bu fonksiyonda yapacağımız şey, bu fonksiyonda, yayıncı tarafından hangi iş parçacığının
bilgilendirildiğini basitçe yazdıracağız ve bu fonksiyonda daha fazla bilgi yazdıracağız.
İlerledikçe, bu fonksiyona argüman olarak belirtilen parametrelerin ne olacağını göreceğiz?
Argüman boyutu nedir ve NFC işlem kodu nedir?
Ve tabii ki istemci kimliği yayıncı tarafından bildirilen iş parçacığıdır.
Değil mi?
Ancak şu anda bu API'yi veya bildirim için T tablosu kaydını henüz uygulamadık.
Abonenin bildirimler için yayıncının yönlendirme tablosuna gerçekten abone olmak için kullandığı
bu API'dir, değil mi?
Yani yayıncılar ve aboneler aslında bu API'yi kullanarak birbirlerine bağlanıyor.
Bu API bir köprü görevi görüyor, değil mi?
Çünkü abone bu API'yi kullanarak bildirimler için abone olacaktır.
Bu API nedeniyle, yönlendirme tablosundaki her bir yönlendirme tablosu girdisi bildirim zincirlerinde bildirim zinciri elemanlarına
sahip olacaktır.
Doğru.
Şimdi bu noktada yönlendirme tablomuzu geliştirelim, böylece yönlendirme tablomuz bildirim zincirleriyle
çalışır.
Şu an itibariyle yönlendirme tablomuz tamamen ham olup sadece bir veri kaynağıdır ve bildirim zincirlerimizle
entegre değildir.
Yönlendirme tablomuzu akıllı hale getirmemiz gerekir, böylece yayıncı bu yönlendirme tablosundaki
herhangi bir girişi güncellediğinde, yönlendirme tablomuz bildirim zincirleri üzerinde yürür ve söz konusu giriş için
abone olan ilgili abonelere bildirim gönderir.
Doğru.
Öyleyse yönlendirme tablosu API'mizi geliştirelim ve yönlendirme tablomuzu bildirim altyapısıyla
entegre edelim.