Keadaan empat mencetuskan pemberitahuan pada satu API dan bermaksud sesuatu yang lain pada API yang lain, dan kod tidak menunjukkan sebarang perbezaan. Setiap nilai keadaan dalam NetworkManager tergolong dalam penghitungan bernama, dan penghitungan itu tidak bersetuju tentang apa maksud sesuatu nombor. Oleh itu menyalin integer daripada coretan yang berfungsi ke callback lain bukanlah pemindahan tingkah laku; ia adalah kebetulan yang menunggu untuk pecah. Cari jenisnya dahulu, dan nombor itu menjadi boleh dibaca.

Nombor tanpa jenis hanyalah khabar angin

Dua penghitungan penting di sini. Satu menerangkan sambungan aktif secara umum: tidak diketahui, mengaktifkan, aktif, menyahaktifkan, dinyahaktifkan. Satu lagi menerangkan sambungan VPN secara khusus, dan ia mempunyai lebih banyak perhentian di sepanjang jalan, termasuk persediaan awal, persediaan sambungan, konfigurasi IP dan permintaan pengesahan sebelum apa-apa diaktifkan. Penomboran kedua-duanya bermula dari sifar dalam kedua-dua kes dan kemudian mencapah, jadi nilai yang bermaksud dinyahaktifkan dalam penghitungan umum mendarat di suatu tempat di tengah urutan VPN. Tiada pengepala yang salah; kedua-duanya menjawab soalan yang berbeza.

Gunakan pemalar simbolik daripada pengepala atau pengikatan yang dipasang dan bukannya literal. Nama itu bertahan daripada penomboran semula; integer itu tidak.

Pantau satu sambungan, bukan mesin

Mulakan dengan UUID profil yang anda pedulikan dan objek sambungan aktif yang dicipta oleh pengaktifan itu. Keadaan peranti, atau keadaan terowong lain, bukan pengganti, walaupun kedua-duanya berubah pada saat yang sama. Simpan identiti objek bersama pemerhatian, supaya laporan kemudian dapat menyatakan profil mana yang menghasilkannya. Mesin mempunyai banyak keadaan; pemberitahuan itu tentang salah satunya.

Kemudian tentukan apa maksud pemberitahuan itu. Sambungan yang tidak pernah mencapai pengaktifan ialah kegagalan persediaan, dan sesi yang aktif kemudian hilang ialah kehilangan. Kedua-duanya layak mendapat perkataan yang berbeza.

Katakan peralihan mana yang anda laporkan

Simpan keadaan sebelumnya dan bandingkan dengan yang baharu, bukannya menguji nilai baharu secara berasingan. Peralihan ke keadaan gagal dan peralihan keluar dari keadaan aktif ialah peristiwa berbeza walaupun kedua-duanya berakhir tanpa apa-apa disambungkan. Catat rentetan sebab di sebelahnya, kerana selalunya itulah satu-satunya bahagian yang boleh diambil tindakan oleh pengguna.

Pemutusan yang disengajakan bukanlah kerosakan. Jika pemberitahuan tidak dapat membezakan, ia akan melatih orang untuk mengabaikannya.

Kekalkan pemerhati hidup

Tinjauan berulang tidak boleh menimbulkan amaran lain untuk keadaan yang tidak berubah. Peraturan tunggal itu menghapuskan sebahagian besar bunyi bising yang dihasilkan oleh pemberitahu ini.

Tangani juga kes apabila pengurus dimulakan semula atau objek yang diperhatikan diganti. Pemerhati yang terikat pada identiti lapuk menjadi senyap tepat pada saat sesuatu yang menarik berlaku, dan senyap kelihatan seperti kesihatan. Temui semula objek semasa selepas perubahan dalam kehadiran pengurus, dan catat bila penemuan semula berlaku. Jika tidak, log menunjukkan terowong yang semata-mata berhenti melaporkan.

Hantar pemberitahuan ke tempat pengguna berada

Callback sistem istimewa tidak mewarisi perkhidmatan pemberitahuan sesi desktop. Mesej yang dihantar daripada pengendali pada tahap root boleh hilang tanpa ralat, yang menghasilkan pemberitahu yang berfungsi apabila diuji secara manual dan tidak pernah dalam praktik. Hantar ke dalam sesi yang memiliki desktop, atau biarkan klien desktop itu sendiri menimbulkan pemberitahuan.

Utamakan pemberitahuan sedia ada klien jika ia sudah meliputi kes itu, kerana dua pemberitahu untuk satu peristiwa ialah masalah sokongan dan bukan lebihan. Simpan masa peristiwa, profil dan sebab dalam rekod sokongan, dan jauhkan kata laluan serta profil penuh daripadanya. Ingat apa itu pemberitahuan: laporan tentang keadaan yang diperhatikan, bukan mekanisme penguatkuasaan, kerana menyekat trafik semasa terowong tiada ialah dasar berasingan dengan pelaksanaannya sendiri.

Artikel berkaitan