diff options
| author | Roy Ben-Shabat <Roy@Twine-s.com> | 2018-08-08 17:28:34 +0300 |
|---|---|---|
| committer | Roy Ben-Shabat <Roy@Twine-s.com> | 2018-08-08 17:28:34 +0300 |
| commit | 9c5f5c1351c78536b54df2c90742efae19f00b59 (patch) | |
| tree | 53e23d42955ed6c0926995a75305fd61112c5c87 /Software/Visual_Studio/PPC/Tango.PPC.Common/MachineSetup/MachineSetupManager.cs | |
| parent | 57ae9d131e898a35061507bc8497bcf648cf00d1 (diff) | |
| download | Tango-9c5f5c1351c78536b54df2c90742efae19f00b59.tar.gz Tango-9c5f5c1351c78536b54df2c90742efae19f00b59.zip | |
Working on PPC machine setup !
Diffstat (limited to 'Software/Visual_Studio/PPC/Tango.PPC.Common/MachineSetup/MachineSetupManager.cs')
| -rw-r--r-- | Software/Visual_Studio/PPC/Tango.PPC.Common/MachineSetup/MachineSetupManager.cs | 110 |
1 files changed, 105 insertions, 5 deletions
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.Common/MachineSetup/MachineSetupManager.cs b/Software/Visual_Studio/PPC/Tango.PPC.Common/MachineSetup/MachineSetupManager.cs index 51c906019..f469fb799 100644 --- a/Software/Visual_Studio/PPC/Tango.PPC.Common/MachineSetup/MachineSetupManager.cs +++ b/Software/Visual_Studio/PPC/Tango.PPC.Common/MachineSetup/MachineSetupManager.cs @@ -1,13 +1,21 @@ -using System; +using FluentFTP; +using System; using System.Collections.Generic; using System.Data.SqlClient; +using System.IO; +using System.IO.Compression; using System.Linq; +using System.Net.Http; +using System.Net.Http.Headers; using System.Text; +using System.Threading; using System.Threading.Tasks; using Tango.Core; using Tango.Core.IO; +using Tango.PMR.Synchronization; using Tango.Settings; using Tango.SQLExaminer; +using Tango.Transport.Web; namespace Tango.PPC.Common.MachineSetup { @@ -28,10 +36,102 @@ namespace Tango.PPC.Common.MachineSetup } } - public Task Setup(string serialNumber, string hostAddress) + private double _downloadProgress; + public double DownloadProgress + { + get { return _downloadProgress; } + set { _downloadProgress = value; RaisePropertyChangedAuto(); } + } + + public Task Setup(string serialNumber, string machineServiceAddress) { return Task.Factory.StartNew(() => { + + //Connect to machine service and get matching packages for this machine. + CurrentStep = MachineSetupSteps.DownloadingPackage; + + MachineSetupRequest request = new MachineSetupRequest(); + request.SerialNumber = serialNumber; + + MachineSetupResponse setup_response = null; + + using (var http = new ProtoWebClient()) + { + setup_response = http.Post<MachineSetupRequest, MachineSetupResponse>(machineServiceAddress + "/api/Synchronization/MachineSetup", request).Result; + } + + //Create temporary folders for packages. + var _newPackageTempFolder = TemporaryManager.CreateFolder(); + _newPackageTempFolder.Persist = true; + + var software_package_folder = _newPackageTempFolder.CreateFolder(); + var embedded_package_folder = _newPackageTempFolder.CreateFolder(); + + + //Download software package. + var tempFile = TemporaryManager.CreateFile(".zip"); + + int fileSize = 0; + DownloadProgress = 0; + + using (FileStreamWrapper fs = new FileStreamWrapper(tempFile.Path, FileMode.Create, (current) => + { + InvokeUINow(() => + { + Thread.Sleep(10); + DownloadProgress = ((double)current / (double)fileSize) * 100d; + }); + })) + { + using (FtpClient ftp = new FtpClient(setup_response.FtpAddress, setup_response.UserName, setup_response.Password)) + { + LogManager.Log("Connecting to FTP site: " + setup_response.FtpAddress); + ftp.ConnectAsync().Wait(); + LogManager.Log("Retrieving download size..."); + fileSize = (int)ftp.GetFileSize(setup_response.ApplicationFtpFilePath); + LogManager.Log("Download size: " + fileSize + " bytes."); + LogManager.Log("Starting download..."); + ftp.DownloadAsync(fs, setup_response.ApplicationFtpFilePath).Wait(); + } + } + + //Extract software package. + ZipFile.ExtractToDirectory(tempFile, software_package_folder); + + //Download embedded package. + tempFile = TemporaryManager.CreateFile(".zip"); + + fileSize = 0; + DownloadProgress = 0; + + using (FileStreamWrapper fs = new FileStreamWrapper(tempFile.Path, FileMode.Create, (current) => + { + InvokeUINow(() => + { + Thread.Sleep(10); + DownloadProgress = ((double)current / (double)fileSize) * 100d; + }); + })) + { + using (FtpClient ftp = new FtpClient(setup_response.FtpAddress, setup_response.UserName, setup_response.Password)) + { + LogManager.Log("Connecting to FTP site: " + setup_response.FtpAddress); + ftp.ConnectAsync().Wait(); + LogManager.Log("Retrieving download size..."); + fileSize = (int)ftp.GetFileSize(setup_response.EmbeddedFtpFilePath); + LogManager.Log("Download size: " + fileSize + " bytes."); + LogManager.Log("Starting download..."); + ftp.DownloadAsync(fs, setup_response.EmbeddedFtpFilePath).Wait(); + } + } + + //Extract embedded package. + ZipFile.ExtractToDirectory(tempFile, embedded_package_folder); + + //Synchronize database + String remote_address = setup_response.DbAddress; + CurrentStep = MachineSetupSteps.SynchronizingSchema; String db_name = "Tango"; @@ -53,7 +153,7 @@ namespace Tango.PPC.Common.MachineSetup ExaminerConfigurationBuilder builder = new ExaminerConfigurationBuilder(ExaminerConfigurationType.Schema); builder. - SetSourceServer(hostAddress, db_name). + SetSourceServer(remote_address, db_name). SetTargetServer(localAddress, db_name). Synchronize(); @@ -78,7 +178,7 @@ namespace Tango.PPC.Common.MachineSetup builder = new ExaminerConfigurationBuilder(ExaminerConfigurationType.OverrideData); builder. - SetSourceServer(hostAddress, db_name). + SetSourceServer(remote_address, db_name). SetTargetServer(localAddress, db_name). Synchronize(); @@ -101,7 +201,7 @@ namespace Tango.PPC.Common.MachineSetup builder = new ExaminerConfigurationBuilder(ExaminerConfigurationType.ProvisionMachine); builder. - SetSourceServer(hostAddress, db_name). + SetSourceServer(remote_address, db_name). SetTargetServer(localAddress, db_name). SetMachineSerialNumber(serialNumber). Synchronize(); |
