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.

Artikli relatati