Är Applikatioun leeft weider, während den Tunnel stierft. Wi-Fi ass nach un, den Internet äntwert nach, an déi privat API, vun där d'App ofhänkt, ass onereechbar ginn. Den .NET-Evenement, op deen d'Leit hei normalerweis zréckgräifen, NetworkAvailabilityChanged, beschreift déi Situatioun guer net. En mellt eng Ännerung vum aggregéierten Zoustand vun der Maschinn, an deen Zoustand kann iwwer eng VPN-Trennung an -Wiederverbindung wouer bleiwen. En Beobachter muss de Client iwwerwaachen, deen den Tunnel besëtzt, net d'Zesummefaassung vum Netzwierkstack.

D'Disponibilitéit ass en Aggregat, net Ären Tunnel

NetworkAvailabilityChanged gëtt ausgeléist, wann sech d'aggregéiert Disponibilitéitsäntwert vun der Maschinn ännert, an déi Äntwert zielt all aktiv Interface ausser loopback oder en Tunnel.

En VPN-Ausfall während Wi-Fi un ass ännert näischt vun deem, wat en misst, dofir kann den Evenement just während deem Feeler stëll bleiwen, deen Iech wichteg ass.

Den Zoustandsflux gehéiert zum Client, deen den Tunnel besëtzt

Bestëmmt, wéi eng Komponent d'Verbindung besëtzt: d'OpenVPN-GUI oder de Service, OpenVPN Connect, oder e Prozess, deen Är Applikatioun gestart huet an kontrolléiert. Dat sinn ënnerschiddlech Besëtzer mat ënnerschiddlechen ënnerstëtzten Interface, an de Beobachter muss deen benotzen, deen zum Deployment passt. Fir en OpenVPN-Prozess, mat deem Dir autoriséiert sidd ze integréieren, mellt de Management-Interface den aktuellen Zoustand, eng Historie an Echtzäitnotifikatiounen. Analyséiert déi dokumentéiert strukturéiert Messagen, amplaz an enger lokaliséierter GUI-Beschrëftung no dem Wuert connected ze sichen.

De Management-Kanal ass eng privilegiéiert Kontrollfläch, also maacht keen neien Listener op a streit Iech net mat der GUI ëm e Kanal, deen se schonn huet.

Generatiounswiechter stoppen veralterte Resultater

All Observatioun gehéiert zu engem bestëmmten Verbindungsversuch. Erhéicht en Generatiounszähler, wann en neien Versuch ufänkt, wann de Kanal verluer geet an wann de Client en Exit mellt.

Betruecht eng Probe, déi während Verbindung A gestart gouf. Den Tunnel fällt, Verbindung B fänkt un, an duerno kënnt den Delai vum HTTP-Erfolleg vun A. Ouni Wiechter mécht dat aalt Resultat den Ecran gréng, während B nach authentifizéiert. D'Annulatioun reduzéiert verschwend Aarbecht, an d'Generatiounspréifung ass dat, wat verhënnert, datt eng veraltert Ofschléissung zum aktuellen Zoustand gëtt:

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

Wend déi selwecht Regel ëm den UI-Versand un, well d'gemarshallt Update ka kommen, nodeems d'Generatioun weidergaang ass.

Initialiséierung a Wiederverbindung sinn ee Liewenszyklus

Behandelt déi éischt Verbindung, d'Wiederverbindung an de Kanalverloscht als ee Liewenszyklus mat engem Reegelsatz:

  • Liest den aktuellen Zoustand a subscribéiert op Notifikatiounen an engem Schrëtt, wou den Interface et erlaabt.
  • Markéiert all Observatioun mat der Identitéit vun der Verbindung an der Generatioun.
  • Maacht d'Bereetschaft bei Wiederverbindung, Exit oder engem verluerenen Observatiounskanal ongülteg.
  • Test de privat Ressource eréischt, nodeems de Besëtzer d'Initialiséierung als fäerdeg mellt.
  • Veröffentlicht nëmme Resultater, déi nach zur aktueller Generatioun gehéieren.

En verluerene Kanal heescht onbekannt, net getrennt. Onbekannt ze mellen ass éierlecher wéi eng Trennung ze mellen, déi Dir net kënnt beweisen, an et verhënnert, datt d'Wiederhuelungslogik op engem Vermut handel.

Mellt Beweiser, keen Boolean

Gitt den genannte Sessiounszoustand an d'Ressourcebereetschaft als getrennt Wäerter zréck, jiddwereen mat engem Alter. E Konsument, deen eppes muss entscheeden, kann dann gesinn, datt déi lescht erfollegräich Probe véierzeg Sekonne al ass, wat eng aner Informatioun ass wéi eng frësch.

Eng Ëffentlech-IP-Sich ass kee Beweis, datt eng privat API déi erfuerderlech Route benotzt huet, also presentéiert se net sou, wéi wann se et wier.

Halt d'Duerchsetzung ausserhalb vum Beobachter

E Callback leeft no der Tatsaach. En kann net garantéieren, datt tëscht dem Evenement an dem Handler kee Paket d'Maschinn verlooss huet. Wann den Design Blockéierung erfuerdert, muss d'Netzwierkpolitik se liwweren, an d'Aufgab vum Beobachter ass, dem Uruffer d'Beweiser z'erklären. Béides ze vermëschen produzéiert Code, deen sech fir eng Firewall hält, well en e Boolean huet. Halt d'Duerchsetzungsschicht langweileg an testbar, a loosst de Beobachter e Lieser bleiwen.

Dann gëtt d'UI-Fro einfach: weist, wat bekannt ass, mat sengem Alter, a sot onbekannt, wann et esou ass.

Ähnlech Artikelen