using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using Tango.Core; using Tango.Core.DI; using Tango.FSE.Common.Connection; using Tango.FSE.Common.FileSystem; using Tango.FSE.Common.RemoteJobUpload; using Tango.PPC.Shared.RemoteJobUpload; using Tango.Transport; namespace Tango.FSE.UI.RemoteJobUpload { /// /// The default remote job upload provider. /// /// public class DefaultRemoteJobUploadProvider : ExtendedObject, IRemoteJobUploadProvider { [TangoInject] private IMachineProvider MachineProvider { get; set; } [TangoInject] private IFileSystemProvider FileSystemProvider { get; set; } /// /// Uploads the specified job file to the remote connected machine. /// /// The job file path. /// Remote job type. /// Optional job name /// public async Task UploadJob(string filePath, RemoteJobUploadType jobType, String name = null) { LogManager.Log($"Uploading job '{filePath}' to the remote machine..."); var uploadResponse = await MachineProvider.MachineOperator.SendGenericRequest(new RemoteJobUploadRequest() { Type = jobType, Name = name ?? Path.GetFileNameWithoutExtension(filePath) }, new TransportRequestConfig() { Timeout = TimeSpan.FromSeconds(30) }); var handler = await FileSystemProvider.Upload(filePath, uploadResponse.TargetFilePath, true); var status = await handler.WaitForCompletion(); if (status != FileSystemHandlerStatus.Completed) { throw handler.FailedException; } var completedResponse = await MachineProvider.MachineOperator.SendGenericRequest(new RemoteJobUploadCompletedRequest() { ID = uploadResponse.ID }, new TransportRequestConfig() { Timeout = TimeSpan.FromSeconds(30) }); if (completedResponse.Error.IsNotNullOrEmpty()) { throw new OperationCanceledException(completedResponse.Error); } LogManager.Log($"Job upload '{filePath}' completed successfully."); } } }