จริง ๆ แล้วตัวแจ้งเตือนของคุณได้รับสถานะใดของ NetworkManager?
จำนวนเต็มเดียวกันหมายถึงปิดใช้งานในการแจกแจงหนึ่ง และหมายถึงกลางการตั้งค่าในอีกอันหนึ่ง จับคู่ชนิดของสถานะกับออบเจ็กต์ก่อนคัดลอกเงื่อนไข
สถานะที่สี่จุดการแจ้งเตือนบน API หนึ่งและหมายถึงอย่างอื่นบนอีกอันหนึ่ง โดยที่โค้ดไม่แสดงความแตกต่างเลย ค่าสถานะทุกค่าใน NetworkManager เป็นของ enumeration ที่มีชื่อ และ enumeration เหล่านั้นไม่ตรงกันว่าตัวเลขที่กำหนดหมายถึงอะไร ดังนั้นการคัดลอกจำนวนเต็มจากตัวอย่างที่ใช้งานได้ไปยัง callback อื่นจึงไม่ใช่การถ่ายโอนพฤติกรรม แต่เป็นความบังเอิญที่รอจะพัง หาชนิดก่อน แล้วตัวเลขจะอ่านได้
ตัวเลขที่ไม่มีชนิดเป็นเพียงข่าวลือ
มีสอง enumeration ที่สำคัญตรงนี้ อันหนึ่งอธิบายการเชื่อมต่อที่ใช้งานอยู่โดยทั่วไป ได้แก่ ไม่ทราบ กำลังเปิดใช้งาน ใช้งานอยู่ กำลังปิดใช้งาน ปิดใช้งาน อีกอันอธิบายการเชื่อมต่อ VPN โดยเฉพาะ และมีจุดแวะมากกว่าเดิม รวมถึงการเตรียมการ การตั้งค่าการเชื่อมต่อ การกำหนดค่า IP และคำขอตรวจสอบสิทธิ์ก่อนที่สิ่งใดจะถูกเปิดใช้งาน การนับเลขของทั้งสองเริ่มจากศูนย์ในทั้งสองกรณีแล้วแยกออกจากกัน ค่าที่หมายถึงปิดใช้งานใน enumeration ทั่วไปจึงไปตกอยู่กลางลำดับ VPN ไม่มีส่วนหัวใดผิด ทั้งสองตอบคำถามที่ต่างกัน
ใช้ค่าคงที่เชิงสัญลักษณ์จากส่วนหัวหรือ binding ที่ติดตั้งไว้แทนค่าคงที่ตรงตัว ชื่ออยู่รอดจากการนับเลขใหม่ แต่จำนวนเต็มไม่อยู่
เฝ้าดูการเชื่อมต่อหนึ่งรายการ ไม่ใช่เครื่อง
เริ่มจาก UUID ของโปรไฟล์ที่คุณสนใจและออบเจ็กต์การเชื่อมต่อที่ใช้งานอยู่ซึ่งการเปิดใช้งานนั้นสร้างขึ้น สถานะของอุปกรณ์ หรือสถานะของทันเนลอื่น ไม่ใช่สิ่งทดแทน แม้ว่าทั้งสองจะเปลี่ยนในขณะเดียวกัน เก็บอัตลักษณ์ของออบเจ็กต์ไว้พร้อมกับการสังเกต เพื่อให้รายงานภายหลังบอกได้ว่าโปรไฟล์ใดสร้างมันขึ้นมา เครื่องมีหลายสถานะ การแจ้งเตือนนี้เกี่ยวกับหนึ่งในนั้น
จากนั้นตัดสินใจว่าการแจ้งเตือนควรหมายถึงอะไร การเชื่อมต่อที่ไม่เคยไปถึงการเปิดใช้งานคือความล้มเหลวในการตั้งค่า และเซสชันที่เคยใช้งานแล้วหายไปคือการสูญเสีย สองสิ่งนี้สมควรได้คำที่ต่างกัน
บอกว่าคุณรายงานการเปลี่ยนผ่านใด
เก็บสถานะก่อนหน้าและเปรียบเทียบกับสถานะใหม่ แทนที่จะทดสอบค่าใหม่แบบแยกส่วน การเปลี่ยนผ่านไปยังสถานะล้มเหลวและการเปลี่ยนผ่านออกจากสถานะที่เปิดใช้งานเป็นเหตุการณ์ที่ต่างกัน แม้ว่าทั้งสองจะจบลงโดยไม่มีอะไรเชื่อมต่อ บันทึกสตริงเหตุผลไว้ข้าง ๆ เพราะบ่อยครั้งมันเป็นส่วนเดียวที่ผู้ใช้ลงมือได้
การตัดการเชื่อมต่อโดยเจตนาไม่ใช่ความผิดปกติ หากการแจ้งเตือนแยกไม่ออก มันจะสอนให้ผู้คนเพิกเฉยต่อมัน
รักษาตัวสังเกตให้มีชีวิต
การสำรวจซ้ำต้องไม่ทำให้เกิดการเตือนอีกครั้งสำหรับสถานะที่ไม่เปลี่ยนแปลง กฎข้อเดียวนี้ขจัดเสียงรบกวนส่วนใหญ่ที่ตัวแจ้งเตือนเหล่านี้สร้างขึ้น
จัดการกรณีที่ตัวจัดการรีสตาร์ทหรือออบเจ็กต์ที่สังเกตถูกแทนที่ด้วย ตัวสังเกตที่ผูกกับอัตลักษณ์เก่าจะเงียบลงในจังหวะที่สิ่งน่าสนใจเกิดขึ้นพอดี และความเงียบดูเหมือนสุขภาพดี ค้นหาออบเจ็กต์ปัจจุบันใหม่หลังการเปลี่ยนแปลงในสถานะการมีอยู่ของตัวจัดการ และบันทึกว่าการค้นพบใหม่เกิดขึ้นเมื่อใด มิฉะนั้นบันทึกจะแสดงทันเนลที่เพียงหยุดรายงาน
ส่งการแจ้งเตือนไปยังที่ที่ผู้ใช้อยู่
callback ของระบบที่ได้รับสิทธิพิเศษไม่สืบทอดบริการแจ้งเตือนของเซสชันเดสก์ท็อป ข้อความที่ส่งจากตัวจัดการระดับ root อาจหายไปโดยไม่มีข้อผิดพลาด ซึ่งสร้างตัวแจ้งเตือนที่ทำงานเมื่อทดสอบด้วยมือและไม่เคยทำงานจริง ส่งไปยังเซสชันที่เป็นเจ้าของเดสก์ท็อป หรือให้ไคลเอนต์ของเดสก์ท็อปเองยกการแจ้งเตือน
เลือกการแจ้งเตือนที่มีอยู่ของไคลเอนต์หากมันครอบคลุมกรณีนี้อยู่แล้ว เพราะตัวแจ้งเตือนสองตัวสำหรับเหตุการณ์เดียวเป็นปัญหาการสนับสนุน ไม่ใช่ความซ้ำซ้อน เก็บเวลาเหตุการณ์ โปรไฟล์ และเหตุผลไว้ในบันทึกการสนับสนุน และเก็บรหัสผ่านกับโปรไฟล์เต็มไว้นอกบันทึกนั้น จำไว้ว่าการแจ้งเตือนคืออะไร: รายงานของสถานะที่สังเกตได้ ไม่ใช่กลไกบังคับใช้ เพราะการบล็อกทราฟฟิกขณะไม่มีทันเนลเป็นนโยบายแยกต่างหากที่มีการนำไปใช้ของตัวเอง