using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Tango.Core; using Tango.Core.DI; using Tango.Integration.Operation; using Tango.PPC.Common.Build; using Tango.PPC.Common.Connection; namespace Tango.PPC.Common.Resume { public class DefaultJobResumeManager : ExtendedObject, IJobResumeManager { private IMachineProvider _machineProvider; private IBuildProvider _buildProvider; public event EventHandler JobResumeUpdated; public event EventHandler JobResumeDropped; [TangoInject] public DefaultJobResumeManager(IMachineProvider machineProvider,IBuildProvider buildProvider) { _machineProvider = machineProvider; _buildProvider = buildProvider; machineProvider.MachineOperator.PrintingEnded += MachineOperator_PrintingEnded; } private void MachineOperator_PrintingEnded(object sender, PrintingEventArgs e) { if (_buildProvider.MachineType.IsXMachine()) { UpdateJobResume(e); } } private void UpdateJobResume(PrintingEventArgs e) { try { if (!e.JobHandler.Status.IsCompleted) { if (e.JobHandler.JobStatus.Progress <= e.JobHandler.ProcessParameters.DryerBufferLengthMeters) return; var model = JobResumeDB.Default.Get(e.Job.Guid); bool insert = false; if (model == null) { model = new JobResumeModel(); insert = true; } model.JobGuid = e.Job.Guid; model.FirstUnitStartPosition = e.JobHandler.Status.CurrentUnitProgress; model.RemainingUnits = e.JobHandler.Status.RemainingUnits; model.GlobalStartPosition = e.JobHandler.JobStatus.Progress; model.ResumeProgress = e.JobHandler.Status.ProgressMinusSettingUp; if (insert) { JobResumeDB.Default.Add(model); } else { JobResumeDB.Default.Update(model); } JobResumeUpdated?.Invoke(this, new JobResumeUpdatedEventArgs() { JobGuid = e.Job.Guid, ResumeModel = model }); } else { JobResumeDB.Default.Delete(e.Job.Guid); JobResumeUpdated?.Invoke(this, new JobResumeUpdatedEventArgs() { JobGuid = e.Job.Guid, ResumeModel = null }); } } catch (Exception ex) { LogManager.Log(ex, "Error inserting/updating job resume info on db."); } } public JobResumeModel GetJobResumeModel(string jobGuid) { return JobResumeDB.Default.Get(jobGuid); } public void DropResume(string jobGuid) { JobResumeDB.Default.Delete(jobGuid); JobResumeDropped?.Invoke(this, new JobResumeDroppedEventArgs() { JobGuid = jobGuid }); } } }