Osservatur tal-istat OpenVPN f'C#: ħarsu lejn is-sessjoni, mhux lejn il-karta tan-netwerk
NetworkAvailabilityChanged mhuwiex avveniment tal-VPN. Aqra l-fluss tal-istat tal-klijent li jippossjedi t-tunnel, ipproteġi ruħek mill-provi antiki u ppubblika l-ħejjija għal kull konnessjoni.
L-applikazzjoni tiegħek tkompli taħdem waqt li t-tunnel imut. Il-Wi-Fi għadu mixgħul, l-internet għadu jwieġeb, u l-API privata li tiddependi fuqha l-app saret mhux aċċessibbli. L-avveniment .NET li n-nies ġeneralment jersqu lejh hawn, NetworkAvailabilityChanged, ma jiddeskrivix dik is-sitwazzjoni xejn. Huwa jirrapporta bidla fil-kundizzjoni aggregata tal-magna, u dik il-kundizzjoni tista' tibqa' vera matul skonnessjoni u rikonnessjoni tal-VPN. Osservatur irid iħares lejn il-klijent li jippossjedi t-tunnel, mhux lejn is-sommarju tal-munzell tan-netwerk dwaru.
Id-disponibbiltà hija aggregat, mhux it-tunnel tiegħek
NetworkAvailabilityChanged jinxtegħel meta tinbidel it-tweġiba aggregata tad-disponibbiltà tal-magna, u dik it-tweġiba tgħodd kull interfejs attiv minbarra loopback jew tunnel.
Waqgħa tal-VPN waqt li l-Wi-Fi mixgħul ma tbiddel xejn minn dak li tkejjel, għalhekk l-avveniment jista' jibqa' sieket proprju waqt il-ħsara li tinteressak.
Il-fluss tal-istat jappartjeni lill-klijent li jippossjedi t-tunnel
Identifika liema komponent jippossjedi l-konnessjoni: il-GUI jew is-servizz ta' OpenVPN, OpenVPN Connect, jew proċess li l-applikazzjoni tiegħek bdiet u tikkontrolla. Dawn huma sidien differenti b'interfejċjiet appoġġjati differenti, u l-osservatur irid juża dak li jaqbel mal-iskjerament. Għal proċess ta' OpenVPN li int awtorizzat tintegra miegħu, l-interfejs tal-ġestjoni jirrapporta l-istat attwali, storja u notifiki f'ħin reali. Analizza l-messaġġi strutturati dokumentati minflok tfittex il-kelma connected f'kaptiv tal-GUI lokalizzat.
Il-kanal tal-ġestjoni huwa wiċċ ta' kontroll privileġġjat, għalhekk tiftaħx semmiegħ ġdid u ma tiġġliedx mal-GUI għal kanal li diġà għandha.
Il-gwardjani tal-ġenerazzjoni jwaqqfu r-riżultati antiki
Kull osservazzjoni tappartjeni għal tentattiv ta' konnessjoni speċifiku. Żid kontatur tal-ġenerazzjoni meta jibda tentattiv ġdid, meta jintilef il-kanal u meta l-klijent jirrapporta ħruġ.
Ikkunsidra prova mibdija waqt il-konnessjoni A. It-tunnel jaqa', tibda l-konnessjoni B, u mbagħad tasal is-suċċess HTTP imdewwem ta' A. Mingħajr gwardjan, dak ir-riżultat antik jagħmel il-wiri aħdar waqt li B għadu qed jawtentika. Il-kanċellazzjoni tnaqqas xogħol moħli, u l-verifika tal-ġenerazzjoni hija dik li żżomm tlestija antika milli ssir l-istat attwali:
var generation = _generation;
var reachable = await ProbeAsync(token);
if (generation != _generation) return;
Publish(reachable);
Applika l-istess regola madwar it-trasferiment lejn l-UI, għax l-aġġornament immarshal jista' jasal wara li l-ġenerazzjoni tkun marret 'il quddiem.
L-inizjalizzazzjoni u r-rikonnessjoni huma ċiklu tal-ħajja wieħed
Ittratta l-ewwel konnessjoni, ir-rikonnessjoni u t-telf tal-kanal bħala ċiklu tal-ħajja wieħed b'sett wieħed ta' regoli:
- Aqra l-istat attwali u abbona għan-notifiki f'pass wieħed fejn l-interfejs jippermetti.
- Ittikketta kull osservazzjoni bl-identità tal-konnessjoni u l-ġenerazzjoni.
- Invallida l-ħejjija fir-rikonnessjoni, fil-ħruġ jew f'kanal ta' osservazzjoni mitluf.
- Ipprova r-riżors privat biss wara li s-sid jirrapporta li l-inizjalizzazzjoni tlestiet.
- Ippubblika biss riżultati li għadhom jappartjenu għall-ġenerazzjoni attwali.
Kanal mitluf ifisser mhux magħruf, mhux skonnettjat. Li tirrapporta mhux magħruf huwa iktar onest milli tirrapporta skonnessjoni li ma tistax tipprova, u jżomm il-loġika tal-ittestjar mill-ġdid milli taġixxi fuq suppożizzjoni.
Irrapporta evidenza, mhux boolean
Irritorna l-istat tas-sessjoni msemmi u l-ħejjija tar-riżors bħala valuri separati, kull wieħed iġorr età. Konsumatur li jrid jiddeċiedi xi ħaġa jista' mbagħad jara li l-aħħar prova b'suċċess għandha erbgħin sekonda, li hija informazzjoni differenti minn waħda friska.
Tiftixa tal-IP pubblika mhijiex evidenza li API privata użat ir-rotta meħtieġa, għalhekk tippreżentahiex bħallikieku.
Żomm l-infurzar barra mill-osservatur
Callback jaħdem wara l-fatt. Ma jistax jiggarantixxi li ebda pakkett ma ħalla l-magna bejn l-avveniment u l-handler. Jekk id-disinn jeħtieġ imblukkar, il-politika tan-netwerk trid tipprovdih, u x-xogħol tal-osservatur huwa li jispjega l-evidenza lill-sejjieħ tiegħu. Li tħallat it-tnejn jipproduċi kodi li jaħseb li huwa firewall għax iżomm boolean. Żomm is-saff tal-infurzar boring u testabbli, u ħalli l-osservatur jibqa' qarrej.
Imbagħad il-mistoqsija tal-UI ssir sempliċi: uri dak li hu magħruf, bl-età tiegħu, u għid mhux magħruf meta hekk ikun.