private void CreateEventSources(List <ErrorCodeSetting> errorCodeSettings) { foreach (var codeSetting in errorCodeSettings) { var plc = string.IsNullOrEmpty(codeSetting.PlcName) ? plcProvider.GetHardware() : plcProvider.GetHardware(codeSetting.PlcName); plc.CreateNotification(codeSetting.ErrorCodeAddress) .FirstAsync() .Where(value => value != null) .Select(value => CreateEvent(value, codeSetting)) .Do(SetActualEvent) .Subscribe() .AddDisposableTo(disposables) ; plc.CreateNotification(codeSetting.ErrorCodeAddress) .Skip(1) .DistinctUntilChanged() .Where(value => value != null) .Do(value => HandleNewErrorCode(value, codeSetting)) .Subscribe() .AddDisposableTo(disposables) ; } lastEventSubject.AddDisposableTo(disposables); activeEventSubject.AddDisposableTo(disposables); }
public bool Initialize() { try { Logger?.Information($"Connecting with Beckhoff at '{settings.AmsNetId}:{settings.Port}'..."); InitializeBeckhoff(); } catch (Exception e) { Logger?.Error(e, "Error while initializing beckhoff"); } Observable.Interval(TimeSpan.FromSeconds(1)) .Do(_ => CheckConnectionHealth()) .Subscribe() .AddDisposableTo(Disposables); connectionStateSubject .DistinctUntilChanged() .Do(state => Logger?.Debug($"Connection state changed to '{state}'")) .Subscribe() .AddDisposableTo(Disposables); adsStateSubject .DistinctUntilChanged() .Do(state => Logger?.Debug($"Ads state changed to '{state}'")) .Do(UpdateSymbols) .Subscribe() .AddDisposableTo(Disposables); connectionStateSubject.AddDisposableTo(Disposables); adsStateSubject.AddDisposableTo(Disposables); symbolsSubject.AddDisposableTo(Disposables); return(true); }