د C# OpenVPN د حالت څارونکی: غونډله وګورئ، نه د شبکې کارت
NetworkAvailabilityChanged د VPN پېښه نه ده. د غونډلې د مالک کليانت د حالت جریان ولولئ، له زړو پلټنو څخه ځان وساتئ او د هرې اړیکې لپاره چمتووالی خپور کړئ.
ستاسو اپلیکیشن کار کوي پداسې حال کې چې غونډله مري۔ Wi-Fi لا هم فعال دی، انټرنېټ لا هم ځواب ورکوي، او هغه شخصي API چې اپلیکیشن پرې تکیه کوي د لاسرسي وړ نه دی شوی۔ هغه .NET پېښه چې خلک دلته معمولاً ورته مخه کوي، NetworkAvailabilityChanged، هغه حالت په هیڅ ډول نه تشریح کوي۔ دا د ماشین د ټولیز حالت بدلون راپور ورکوي، او هغه حالت کېدای شي د VPN د قطع او بیا نښلېدو په اوږدو کې سم پاتې شي۔ څارونکی باید هغه کليانت وګوري چې غونډله يې لري، نه د شبکې سټک لنډیز۔
شتون ټولیزه اندازه ده، نه ستاسو غونډله
NetworkAvailabilityChanged هغه وخت فعالېږي چې د ماشین ټولیز ځواب د شتون په اړه بدل شي، او هغه ځواب هر فعال انټرفېس پرته له loopback یا غونډلې شمېري۔
د VPN لوېدل پداسې حال کې چې Wi-Fi فعال دی هغه څه نه بدلوي چې دا یې اندازه کوي، له همدې امله پېښه کېدای شي په سمه توګه د هغه نیمګړتیا په جریان کې چوپه پاتې شي چې تاسو یې اندیښنه لرئ۔
د حالت جریان د هغه کليانت دی چې غونډله يې لري
وټاکئ چې کوم برخه د اړیکې مالک دی: د OpenVPN GUI یا خدمت، OpenVPN Connect، یا هغه پروسه چې ستاسو اپلیکیشن پیل او کنټرول کړې۔ دا بېلابېل مالکان د بېلابېلو ملاتړ شوو انټرفېسونو سره دي، او څارونکی باید هغه وکاروي چې له خپرېدو سره سمون لري۔ د OpenVPN پروسې لپاره چې تاسو يې د یوځای کېدو اجازه لرئ، د مدیریت انټرفېس اوسنی حالت، تاریخچه او ریښتیني وخت خبرتیاوې راپور ورکوي۔ د بومي شوي GUI په سرلیک کې د connected کلمې په لټه کې کېدو پرځای مستند شوي جوړښتي پیغامونه تحلیل کړئ۔
د مدیریت چینل یوه ځانګړې کنټرول سطحه ده، له همدې امله نوی اورېدونکی مه خلاصوئ او له GUI سره د هغه چینل لپاره مه جنګېږئ چې هغه يې لا دمخه لري۔
د نسل ساتونکي زړې پایلې بندوي
هره مشاهده د یوې ځانګړې اړیکې هڅې پورې اړه لري۔ د نسل شمېرونکی زیات کړئ کله چې نوې هڅه پیلېږي، کله چې چینل ورک شي او کله چې کليانت وتل راپور ورکړي۔
د A د اړیکې په جریان کې پیل شوې پلټنه په پام کې ونیسئ۔ غونډله لوېږي، د B اړیکه پیلېږي، او بیا د A ناوخته HTTP بری رارسېږي۔ له ساتونکي پرته هغه زړه پایله ښودنه شنه کوي پداسې حال کې چې B لا تصدیقېږي۔ لغوه کول ضایع شوی کار کموي، او د نسل پلټنه هغه څه ده چې زړې بشپړېدنې ته اجازه نه ورکوي چې اوسنی حالت شي:
var generation = _generation;
var reachable = await ProbeAsync(token);
if (generation != _generation) return;
Publish(reachable);
همدا قاعده د UI د لېږلو په شاوخوا کې پلي کړئ، ځکه چې مارشل شوی تازه کول کېدای شي وروسته له دې راشي چې نسل مخکې لاړ۔
پیل او بیا نښلېدل یو ژوندلیک دی
لومړنۍ اړیکه، بیا نښلېدل او د چینل ورکېدل د یوې قاعدې ټولګې سره یو ژوندلیک وګڼئ:
- اوسنی حالت ولولئ او هلته چې انټرفېس اجازه ورکوي په یو ګام کې خبرتیاوو ته ګډون وکړئ۔
- هره مشاهده د اړیکې هویت او نسل سره نښه کړئ۔
- د بیا نښلېدو، وتلو یا ورک شوي مشاهدې چینل په صورت کې چمتووالی باطل کړئ۔
- شخصي سرچینه یوازې هغه وخت وپلټئ چې مالک د پیل بشپړېدو راپور ورکړي۔
- یوازې هغه پایلې خپرې کړئ چې لا هم اوسني نسل پورې اړه لري۔
ورک شوی چینل معنا نامعلوم، نه قطع شوی۔ نامعلوم راپور ورکول له هغه قطع راپور ورکولو څخه چې تاسو يې ثابتولی نه شئ ډېر صادق دی، او د بیا هڅې منطق د اټکل پر بنسټ له عمل کولو منع کوي۔
شواهد راپور ورکړئ، نه بولیان
نومول شوی د غونډلې حالت او د سرچینې چمتووالی د جلا ارزښتونو په توګه بیرته راګرځوئ، هر یو د عمر سره۔ هغه مصرفوونکی چې باید یو څه پریکړه وکړي بیا کولی شي وویني چې وروستۍ بریالۍ پلټنه څلوېښت ثانیې عمر لري، چې له تازې معلوماتو څخه توپیر لري۔
د عامه IP لټون دا شواهد نه دي چې یو شخصي API اړین لاره کارولې، له همدې امله دا داسې مه وړاندې کوئ لکه څنګه چې وي۔
پلي کول د څارونکي څخه بهر وساتئ
بیرته غږ د پېښې وروسته ځغلېږي۔ دا نشي تضمینولی چې د پېښې او اداره کوونکي ترمنځ له ماشین څخه هیڅ پاکټ نه دی وتلی۔ که ډیزاین بندیز غواړي، د شبکې تګلاره باید هغه برابره کړي، او د څارونکي دنده دا ده چې خپل غوښتونکي ته شواهد تشریح کړي۔ دواړه ګډول داسې کوډ جوړوي چې ځان د اوروال په توګه ګڼي ځکه چې بولیان لري۔ د پلي کولو پوړ ستړی کوونکی او د ازموینې وړ وساتئ، او څارونکی دې لوستونکی پاتې شي۔
بیا د UI پوښتنه ساده کېږي: هغه څه وښایاست چې معلوم دي، د هغوی د عمر سره، او کله چې نامعلوم وي نامعلوم ووایاست۔