using DigitalData.Modules.Messaging.WCF; using ECM.JobRunner.Common.JobRunnerReference; using System.Timers; namespace ECM.JobRunner.Web.Data { public class WcfService { private readonly Channel _channelManager; private ServerAddress _address; private bool _connected = false; private System.Timers.Timer heartbeatTimer = new(); private IEDMIServiceChannel _channel; public IEDMIServiceChannel Channel { get { return _channel; } } public event EventHandler? ConnectedChanged; public bool Connected { get { return _connected; } } public WcfService(LoggingService Logging) { _address.Host = "172.24.12.39"; _address.Port = 9001; _channelManager = new Channel(Logging.LogConfig, _address, "JobRunner"); _channel = _channelManager.GetChannel(); _connected = true; heartbeatTimer.Elapsed += HeartbeatTimer_Elapsed; heartbeatTimer.Interval = 1000; heartbeatTimer.Start(); } private void CallConnectedChanged(bool pConnected) { if (ConnectedChanged != null && pConnected != _connected) { _connected = pConnected; ConnectedChanged(this, pConnected); } } private async void HeartbeatTimer_Elapsed(object? sender, ElapsedEventArgs e) { try { await _channel.GetHeartbeatAsync(); CallConnectedChanged(true); } catch (Exception) { CallConnectedChanged(false); } } public async Task> GetObjectTypes() { var resp = await _channel.GetJobConfigAsync(); if (resp == null) return new(); if (resp.OK == false) return new(); return resp.WindreamObjectTypes.ToList(); } public async Task> GetJobTypes() { var resp = await _channel.GetJobConfigAsync(); if (resp == null) return new(); if (resp.OK == false) return new(); return resp.JobTypes.ToList(); } } }