aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/PPC/Tango.PPC.Common/MachineSetup/MachineSetupManager.cs
diff options
context:
space:
mode:
authorRoy Ben-Shabat <Roy@Twine-s.com>2018-08-08 17:28:34 +0300
committerRoy Ben-Shabat <Roy@Twine-s.com>2018-08-08 17:28:34 +0300
commit9c5f5c1351c78536b54df2c90742efae19f00b59 (patch)
tree53e23d42955ed6c0926995a75305fd61112c5c87 /Software/Visual_Studio/PPC/Tango.PPC.Common/MachineSetup/MachineSetupManager.cs
parent57ae9d131e898a35061507bc8497bcf648cf00d1 (diff)
downloadTango-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.cs110
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();