Mae eich cymhwysiad yn dal i weithio wrth i'r tiwnel farw. Mae Wi-Fi yn dal i fyny, mae'r rhyngrwyd yn dal i ateb, ac mae'r API preifat y mae'r ap yn dibynnu arno wedi dod yn anghyrraeddadwy. Y digwyddiad .NET y mae pobl fel arfer yn cyrraedd amdano yma, NetworkAvailabilityChanged, nid yw'n disgrifio'r sefyllfa honno o gwbl. Mae'n adrodd am newid yng nghyflwr cyfunol y peiriant, a gall y cyflwr hwnnw aros yn wir ar draws datgysylltiad ac ailgysylltiad VPN. Rhaid i sylwedydd wylio'r cleient sy'n berchen ar y tiwnel, nid crynodeb y pentwr rhwydwaith ohono.

Mae argaeledd yn gyfuniad, nid eich tiwnel

NetworkAvailabilityChanged yn tanio pan fydd ateb argaeledd cyfunol y peiriant yn newid, ac mae'r ateb hwnnw'n cyfrif unrhyw ryngwyneb i fyny heblaw loopback neu diwnel.

Nid yw cwymp VPN tra bod Wi-Fi i fyny yn newid dim y mae'n ei fesur, a dyna pam y gall y digwyddiad aros yn dawel drwy'r union fethiant sy'n bwysig i chi.

Mae'r ffrwd cyflwr yn perthyn i'r cleient sy'n berchen ar y tiwnel

Nodwch pa gydran sy'n berchen ar y cysylltiad: GUI neu wasanaeth OpenVPN, OpenVPN Connect, neu broses a gychwynnwyd a reolir gan eich cymhwysiad. Mae'r rhain yn berchenogion gwahanol â rhyngwynebau cefnogol gwahanol, a rhaid i'r sylwedydd ddefnyddio'r un sy'n cyfateb i'r defnydd. Ar gyfer proses OpenVPN yr ydych wedi'ch awdurdodi i integreiddio â hi, mae'r rhyngwyneb rheoli'n adrodd y cyflwr presennol, hanes a hysbysiadau amser real. Dadansoddwch y negeseuon strwythuredig dogfennedig yn lle chwilio am y gair connected mewn capsiwn GUI wedi'i leoleiddio.

Mae'r sianel reoli'n wyneb rheoli breiniol, felly peidiwch ag agor gwrandawr newydd na chweryla â'r GUI am sianel y mae'n ei dal yn barod.

Mae gwarchodwyr cenhedlaeth yn atal canlyniadau hen

Mae pob arsylwi'n perthyn i ymgais gysylltu benodol. Cynyddwch gownter cenhedlaeth pan fydd ymgais newydd yn dechrau, pan gollir y sianel, a phan fydd y cleient yn adrodd ymadawiad.

Ystyriwch brawf a gychwynnwyd yn ystod cysylltiad A. Mae'r tiwnel yn cwympo, mae cysylltiad B yn dechrau, ac yna daw llwyddiant HTTP gohiriedig A i mewn wedyn. Heb warchodwr, mae'r hen ganlyniad hwnnw'n troi'r arddangosfa'n wyrdd tra bod B yn dal i uwchadolygu. Mae canslo'n lleihau gwaith gwastraffus, a'r prawf cenhedlaeth sy'n atal cwblhad hen rhag dod yn gyflwr presennol:

var generation = _generation;
var reachable = await ProbeAsync(token);
if (generation != _generation) return;
Publish(reachable);

Cymhwyswch yr un rheol o amgylch anfon i'r UI, oherwydd gall y diweddariad a farsialwyd gyrraedd ar ôl i'r genhedlaeth symud ymlaen.

Mae cychwyniad ac ailgysylltiad yn un cylch bywyd

Triniwch y cysylltiad cyntaf, yr ailgysylltiad a cholled sianel fel un cylch bywyd ag un set o reolau:

  • Darllenwch y cyflwr presennol a thanysgrifiwch i hysbysiadau mewn un cam lle mae'r rhyngwyneb yn caniatáu.
  • Tagiwch bob arsylwi gyda hunaniaeth y cysylltiad a'r genhedlaeth.
  • Annullwch barodrwydd ar ailgysylltiad, ymadawiad, neu sianel arsylwi goll.
  • Prawfch yr adnodd preifat yn unig ar ôl i'r perchennog adrodd bod cychwyniad wedi'i gwblhau.
  • Cyhoeddwch yn unig ganlyniadau sy'n dal i berthyn i'r genhedlaeth bresennol.

Mae sianel goll yn golygu anhysbys, nid datgysylltiedig. Mae adrodd anhysbys yn fwy gonest nag adrodd datgysylltiad na allwch ei brofi, ac mae'n atal y rhesymeg ailgynnig rhag gweithredu ar ddyfaliad.

Adroddwch dystiolaeth, nid boolean

Dychwelwch gyflwr y sesiwn a enwyd a pharodrwydd yr adnodd fel gwerthoedd ar wahân, pob un yn cario oedran. Yna gall defnyddiwr sydd â rhywbeth i'w benderfynu weld bod oedran y prawf llwyddiannus diwethaf yn ddeugain eiliad, sy'n wybodaeth wahanol i un ffres.

Nid yw chwilio am IP cyhoeddus yn dystiolaeth bod API preifat wedi defnyddio'r llwybr gofynnol, felly peidiwch â'i gyflwyno fel petai.

Cadwch orfodaeth y tu allan i'r sylwedydd

Mae galwad yn ôl yn rhedeg ar ôl y ffaith. Ni all warantu na adawodd unrhyw becyn y peiriant rhwng y digwyddiad a'r triniwr. Os yw'r dyluniad yn gofyn am rwystro, rhaid i'r polisi rhwydwaith ei ddarparu, a gwaith y sylwedydd yw egluro'r dystiolaeth i'w alwr. Mae cymysgu'r ddau yn cynhyrchu cod sy'n credu ei fod yn wal dân oherwydd ei fod yn dal boolean. Cadwch y haen orfodaeth yn ddiflas ac yn brofadwy, a gadewch i'r sylwedydd aros yn ddarllenydd.

Yna mae cwestiwn y UI yn syml: dangoswch beth sy'n hysbys, gyda'i oedran, a dywedwch anhysbys pan felly y mae.

Erthyglau cysylltiedig