الحالة الرابعة تُطلق إشعارًا في واجهة برمجية واحدة وتعني شيئًا آخر في أخرى، ولا تُظهر الشيفرة أي فرق على الإطلاق. كل قيمة حالة في NetworkManager تنتمي إلى تعداد مسمّى، والتعدادات لا تتفق على معنى رقم معيّن. لذا فإن نسخ عدد صحيح من مقتطف يعمل إلى دالة رد نداء مختلفة ليس نقلًا للسلوك؛ بل صدفة تنتظر أن تنكسر. ابحث عن النوع أولًا، يصبح الرقم مقروءًا.

رقم بلا نوع مجرد إشاعة

هناك تعدادان يهمّان هنا. الأول يصف اتصالًا نشطًا بشكل عام: غير معروف، تنشيط، نشط، إلغاء تنشيط، معطَّل. والثاني يصف اتصال VPN على وجه التحديد، وله محطات أكثر على الطريق، منها التحضير وإعداد الاتصال وتكوين IP وطلب مصادقة قبل تنشيط أي شيء. يبدأ ترقيمهما من الصفر في الحالتين ثم يفترقان، فالقيمة التي تعني معطَّل في التعداد العام تقع في مكان ما وسط تسلسل VPN. لا تخطئ أي من الترويستين؛ إنهما تجيبان عن سؤالين مختلفين.

استخدم الثابت الرمزي من الترويسة أو الربط المثبَّت بدلًا من قيمة حرفية. الاسم ينجو من إعادة الترقيم؛ أما العدد الصحيح فلا.

راقب اتصالًا واحدًا، لا الجهاز

ابدأ من معرّف UUID للملف الشخصي الذي يهمّك ومن كائن الاتصال النشط الذي أنشأه ذلك التنشيط. حالة جهاز، أو حالة نفق آخر، ليست بديلًا، حتى عندما يتغير الاثنان في اللحظة نفسها. احتفظ بهوية الكائن مع الملاحظة، كي يستطيع تقرير لاحق أن يقول أي ملف شخصي أنتجها. للجهاز حالات كثيرة؛ والإشعار يتعلق بواحدة منها.

ثم قرّر ما الذي ينبغي أن يعنيه الإشعار. الاتصال الذي لم يبلغ التنشيط قط هو فشل في الإعداد، والجلسة التي كانت نشطة ثم اختفت هي خسارة. هذه تستحق كلمات مختلفة.

قل أي انتقال تُبلغ عنه

خزّن الحالة السابقة وقارنها بالحالة الجديدة، بدلًا من اختبار القيمة الجديدة بمعزل عن غيرها. الانتقال إلى حالة فاشلة والانتقال خارج حالة نشطة حدثان مختلفان حتى عندما ينتهي كلاهما بلا شيء متصل. سجّل سلسلة السبب إلى جانبه، لأنها غالبًا الجزء الوحيد الذي يمكن للمستخدم التصرف بناءً عليه.

القطع المتعمد ليس عيبًا. إذا لم يستطع الإشعار التمييز، فسيدرّب الناس على تجاهله.

أبقِ المراقب حيًّا

لا يجوز أن يُطلق الاستقصاء المتكرر تنبيهًا آخر لحالة لم تتغير. هذه القاعدة الوحيدة تزيل معظم الضجيج الذي تولّده هذه المنبّهات.

تعامل أيضًا مع حالة إعادة تشغيل المدير أو استبدال الكائن المراقب. المراقب المرتبط بهوية قديمة يصمت في اللحظة التي يحدث فيها شيء مثير للاهتمام بالضبط، والصمت يبدو كصحة. أعد اكتشاف الكائن الحالي بعد تغيّر وجود المدير، وسجّل متى حدث إعادة الاكتشاف. وإلا فسيُظهر السجل نفقًا توقف ببساطة عن الإبلاغ.

أوصل الإشعار حيث يوجد المستخدم

دالة رد النداء النظامية ذات الامتيازات لا ترث خدمة إشعارات جلسة سطح المكتب. الرسالة المرسلة من معالج بمستوى الجذر يمكن أن تختفي دون خطأ، ما ينتج منبّهًا يعمل عند الاختبار اليدوي ولا يعمل أبدًا في الواقع. أوصل الإشعار إلى الجلسة التي تملك سطح المكتب، أو دع عميل سطح المكتب نفسه يطلق الإشعار.

فضّل إشعار العميل الموجود إن كان يغطي الحالة أصلًا، لأن وجود منبّهين لحدث واحد مشكلة دعم لا تكرار. احتفظ بوقت الحدث والملف الشخصي والسبب في سجل الدعم، وأبعد كلمات المرور والملفات الشخصية الكاملة عنه. تذكّر ما هو الإشعار: تقرير عن حالة مرصودة، لا آلية إنفاذ، لأن حجب حركة المرور في غياب النفق سياسة منفصلة لها تنفيذها الخاص.

مقالات ذات صلة