Beispiel #1
0
        public ClientService
        (
            ILogger <ClientService> logger,
            ILogger <VirtualNetworkService> networkLogger,
            IHostApplicationLifetime appLifetime,
            IOptions <GeneralOptions> generalOptions,
            IOptions <NetworkOptions> networkOptions,
            ICommandLineInterface cli,
            IInternetConnectionVerifier internetConnectionVerifierVerifier,
            IVpnConnectionVerifier vpnConnectionVerifier,
            IPlatform platform
        )
        {
            this._Logger         = logger ?? throw new ArgumentNullException(nameof(logger));
            this._NetworkLogger  = networkLogger ?? throw new ArgumentNullException(nameof(networkLogger));
            this._AppLifetime    = appLifetime ?? throw new ArgumentNullException(nameof(appLifetime));
            this._GeneralOptions = generalOptions ?? throw new ArgumentNullException(nameof(generalOptions));
            this._NetworkOptions = networkOptions ?? throw new ArgumentNullException(nameof(networkOptions));
            this._Cli            = cli ?? throw new ArgumentNullException(nameof(cli));
            this._InternetConnectionVerifierVerifier = internetConnectionVerifierVerifier ?? throw new ArgumentNullException(nameof(internetConnectionVerifierVerifier));
            this._VpnConnectionVerifier = vpnConnectionVerifier ?? throw new ArgumentNullException(nameof(vpnConnectionVerifier));
            this._Platform = platform ?? throw new ArgumentNullException(nameof(platform));

            this._ClientServiceRestarting = new Subject <Object>();
            this._ClientServiceRestarted  = new Subject <Object>();

            this._Networks            = new Dictionary <VirtualNetworkService, Int32>();
            this._IsInternetConnected = null;
        }
Beispiel #2
0
        public VirtualNetworkService
        (
            ILogger <VirtualNetworkService> logger,
            ICommandLineInterface cli,
            IVpnConnectionVerifier vpnConnectionVerifier,
            IPlatform platform,
            Subject <Object> clientServiceRestarting,
            Subject <Object> clientServiceRestarted,
            VirtualNetwork network
        )
        {
            if (clientServiceRestarting == null)
            {
                throw new ArgumentNullException(nameof(clientServiceRestarting));
            }
            if (clientServiceRestarted == null)
            {
                throw new ArgumentNullException(nameof(clientServiceRestarted));
            }

            this._Logger = logger ?? throw new ArgumentNullException(nameof(logger));
            this._Cli    = cli ?? throw new ArgumentNullException(nameof(cli));
            this._VpnConnectionVerifier = vpnConnectionVerifier ?? throw new ArgumentNullException(nameof(vpnConnectionVerifier));
            this._Platform     = platform ?? throw new ArgumentNullException(nameof(platform));
            this.Configuration = network ?? throw new ArgumentNullException(nameof(network));

            this._IsDisposed = new Subject <Object>();

            var __IsInitialized = new Subject <Object>();

            clientServiceRestarting

            .TakeUntil(this._IsDisposed)
            .SkipUntil(__IsInitialized)
            .Subscribe(this.OnClientServiceRestarting);

            clientServiceRestarted

            .TakeUntil(this._IsDisposed)
            .SkipUntil(__IsInitialized)
            .Subscribe(this.OnClientServiceRestarted);

            this._Account = new BehaviorSubject <Account>(null);
            this._Account

            .TakeUntil(this._IsDisposed)
            .SkipUntil(__IsInitialized)
            .DistinctUntilChanged()
            .Subscribe(this.OnAccountFoundChanged);

            this._Device = new BehaviorSubject <Device>(null);
            this._Device

            .SkipUntil(__IsInitialized)
            .TakeUntil(this._IsDisposed)
            .DistinctUntilChanged()
            .Subscribe(this.OnDeviceFoundChanged);

            // this._Interface = new BehaviorSubject<NetworkInterface>(null);
            // this._Interface
            //
            //  .TakeUntil(this._IsDisposed)
            //  .SkipUntil(__IsInitialized)
            //  .DistinctUntilChanged()
            //  .Subscribe(this.OnInterfaceFoundChanged);

            this._InterfaceName = new BehaviorSubject <String>(null);
            this._InterfaceName

            .TakeUntil(this._IsDisposed)
            .SkipUntil(__IsInitialized)
            .DistinctUntilChanged()
            .Subscribe(this.OnInterfaceFoundChanged);

            this._IPv4AddressAssigned = new BehaviorSubject <Boolean?>(null);
            this._IPv4AddressAssigned

            .TakeUntil(this._IsDisposed)
            .SkipUntil(__IsInitialized)
            .NotNull()
            .DistinctUntilChanged()
            .Subscribe(this.OnIPv4AddressAssignedChanged);

            this._IPv6AddressAssigned = new BehaviorSubject <Boolean?>(null);
            this._IPv6AddressAssigned

            .TakeUntil(this._IsDisposed)
            .SkipUntil(__IsInitialized)
            .NotNull()
            .DistinctUntilChanged()
            .Subscribe(this.OnIPv6AddressAssignedChanged);

            this._IPv4RoutesAssigned = new BehaviorSubject <Boolean?>(null);
            this._IPv4RoutesAssigned

            .TakeUntil(this._IsDisposed)
            .SkipUntil(__IsInitialized)
            .NotNull()
            .DistinctUntilChanged()
            .Subscribe(this.OnIPv4RoutesAppliedChanged);

            this._IPv6RoutesAssigned = new BehaviorSubject <Boolean?>(null);
            this._IPv6RoutesAssigned

            .TakeUntil(this._IsDisposed)
            .SkipUntil(__IsInitialized)
            .NotNull()
            .DistinctUntilChanged()
            .Subscribe(this.OnIPv6RoutesAppliedChanged);

            this._ConfigurationState = new BehaviorSubject <ConfigurationState?>(null);
            this._ConfigurationState

            .TakeUntil(this._IsDisposed)
            .SkipUntil(__IsInitialized)
            .NotNull()
            .DistinctUntilChanged()
            .Subscribe(this.OnConfigurationStateChanged);

            this._ConnectionState = new BehaviorSubject <ConnectionState?>(null);
            this._ConnectionState

            .TakeUntil(this._IsDisposed)
            .SkipUntil(__IsInitialized)
            .NotNull()
            .DistinctUntilChanged()
            .Subscribe(this.OnConnectionStateChanged);

            this._ReachableState = new BehaviorSubject <ReachableState?>(null);
            this._ReachableState

            .TakeUntil(this._IsDisposed)
            .NotNull()
            .DistinctUntilChanged()
            .Subscribe(this.OnReachableStateChanged);

            this._ConnectionVerificationResult = new BehaviorSubject <ConnectionVerificationResult>(null);
            this._ConnectionVerificationResult

            .TakeUntil(this._IsDisposed)
            .NotNull()
            .DistinctUntilChanged()
            .Subscribe(this.OnConnectionVerificationResultChanged);

            __IsInitialized.OnNext(null);
        }