diff options
| author | Shlomo Hecht <shlomo@twine-s.com> | 2019-02-19 11:19:21 +0200 |
|---|---|---|
| committer | Shlomo Hecht <shlomo@twine-s.com> | 2019-02-19 11:19:21 +0200 |
| commit | 93e6a6bfa7238826dcdea989e279ec3450067f83 (patch) | |
| tree | 212b5023935862346a7de311e37cf1ef727efcd5 /Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common | |
| parent | e99efd9d9b7b67a76db82a9a40525f96bcf064c0 (diff) | |
| parent | 3fcd0dbc6650749421f0390a60154c52254682e6 (diff) | |
| download | Tango-93e6a6bfa7238826dcdea989e279ec3450067f83.tar.gz Tango-93e6a6bfa7238826dcdea989e279ec3450067f83.zip | |
Merge branch 'master' of https://twinetfs.visualstudio.com/Tango/_git/Tango
Diffstat (limited to 'Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common')
25 files changed, 516 insertions, 145 deletions
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Authentication/AuthenticationLoginResult.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Authentication/AuthenticationLoginResult.cs index 78f5365a5..dd18d75b2 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Authentication/AuthenticationLoginResult.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Authentication/AuthenticationLoginResult.cs @@ -4,6 +4,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using Tango.BL.Entities; +using Tango.MachineStudio.Common.Web; namespace Tango.MachineStudio.Common.Authentication { diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Authentication/IAuthenticationProvider.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Authentication/IAuthenticationProvider.cs index 7cc2b5b51..4958cb0f4 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Authentication/IAuthenticationProvider.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Authentication/IAuthenticationProvider.cs @@ -13,11 +13,6 @@ namespace Tango.MachineStudio.Common.Authentication public interface IAuthenticationProvider { /// <summary> - /// Gets the access token that was retrieved at the last login. - /// </summary> - String AccessToken { get; } - - /// <summary> /// Occurs when the current logged-in user has changed. /// </summary> event EventHandler<User> CurrentUserChanged; diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/MachineStudioSettings.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/MachineStudioSettings.cs index b8d767c5e..f7c05c1a8 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/MachineStudioSettings.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/MachineStudioSettings.cs @@ -110,6 +110,14 @@ namespace Tango.MachineStudio.Common /// <summary> /// Gets the machine service address. /// </summary> + public String MachineServiceAddress + { + get { return GetMachineServiceAddress(); } + } + + /// <summary> + /// Gets the machine service address. + /// </summary> /// <returns></returns> public String GetMachineServiceAddress() { diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Publish/MachineStudioPublisher.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Publish/MachineStudioPublisher.cs new file mode 100644 index 000000000..dfbe0adc6 --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Publish/MachineStudioPublisher.cs @@ -0,0 +1,246 @@ +using CommandLine; +using Ionic.Zip; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Tango.Core; +using Tango.Core.Cryptography; +using Tango.Core.Helpers; +using Tango.MachineStudio.Common.Web; +using Tango.Transport.Web; +using Tango.Web; + +namespace Tango.MachineStudio.Common.Publish +{ + public class MachineStudioPublisher : ExtendedObject + { + private MachineStudioWebClient _client; + + /// <summary> + /// Occurs on publish progress. + /// </summary> + public event EventHandler<PublishProgressEventArgs> PublishProgress; + + private PublishOptions _options; + /// <summary> + /// Gets or sets the publish options. + /// </summary> + public PublishOptions Options + { + get { return _options; } + set { _options = value; RaisePropertyChangedAuto(); } + } + + /// <summary> + /// Initializes a new instance of the <see cref="MachineStudioPublisher"/> class. + /// </summary> + public MachineStudioPublisher() + { + _client = new MachineStudioWebClient(); + Options = new PublishOptions(); + } + + /// <summary> + /// Initializes a new instance of the <see cref="MachineStudioPublisher"/> class. + /// </summary> + /// <param name="publishOptions">The publish options.</param> + public MachineStudioPublisher(PublishOptions publishOptions) : this() + { + Options = publishOptions; + } + + /// <summary> + /// Gets the latest version. + /// </summary> + /// <returns></returns> + public async Task<String> GetRemoteVersion() + { + _client.Environment = Options.Environment; + var response = await _client.GetLatestVersion(new LatestVersionRequest()); + return response.Version; + } + + /// <summary> + /// Gets the latest version. + /// </summary> + /// <returns></returns> + public async Task<String> GetRemoteVersion(DeploymentSlot environment) + { + _client.Environment = environment; + var response = await _client.GetLatestVersion(new LatestVersionRequest()); + return response.Version; + } + + /// <summary> + /// Gets the latest version. + /// </summary> + /// <returns></returns> + public String GetLocalVersion() + { + return FileVersionInfo.GetVersionInfo(GetMachineStudioExecutablePath()).ProductVersion; + } + + /// <summary> + /// Gets the machine studio executable path. + /// </summary> + /// <returns></returns> + public String GetMachineStudioExecutablePath() + { + String appPath = Path.Combine(Options.GetApplicationPath(), "Tango.MachineStudio.UI.exe"); + return appPath; + } + + /// <summary> + /// Login to machine service and returns an access token. + /// </summary> + /// <returns></returns> + private Task Login() + { + return Task.Factory.StartNew(() => + { + return _client.Login(new LoginRequest() + { + Email = Options.Email, + Password = Options.Password, + Version = GetLocalVersion(), + }).Result; + }); + } + + /// <summary> + /// Publish a machine studio version using the specified <see cref="Options"/>. + /// </summary> + /// <returns></returns> + public Task Publish() + { + _client.Environment = Options.Environment; + + String appPath = GetMachineStudioExecutablePath(); + String folder = Options.GetApplicationPath(); + + if (!File.Exists(appPath)) + { + throw new FileNotFoundException($"Could not locate the machine studio executable at {appPath}."); + } + + String tempFile = TemporaryManager.CreateFile(); + + return Task.Factory.StartNew(() => + { + try + { + OnPublishProgress(0, 100, $"Logging in to machine service at {Options.Environment.ToAddress()}..."); + Login().Wait(); + + OnPublishProgress(0, 100, $"Fetching remote version from {Options.Environment.ToAddress()}..."); + + String remote_version = GetRemoteVersion().Result; + String local_version = GetLocalVersion(); + + OnPublishProgress(0, 100, $"Remote version: {remote_version}"); + OnPublishProgress(0, 100, $"Local version: {local_version}"); + + if (Version.Parse(local_version) <= Version.Parse(remote_version)) + { + throw new InvalidOperationException($"The local version '{local_version}' is not greater than the remote version '{remote_version}'."); + } + + OnPublishProgress(0, 100, $"Requesting version upload..."); + + var response = _client.UploadVersion(new UploadVersionRequest() + { + Version = local_version, + Comments = Options.Comments, + }).Result; + + OnPublishProgress(0, 100, $"Starting version packaging..."); + + using (ZipFile zip = new ZipFile()) + { + zip.AddDirectory(Path.Combine(folder, "x86"), "/x86"); + zip.AddDirectory(Path.Combine(folder, "x64"), "/x64"); + + var files = Directory.GetFiles(folder, "*.*", SearchOption.TopDirectoryOnly).ToList(); + + foreach (var file in files) + { + zip.AddFile(file, "/"); + } + + zip.SaveProgress += (x, e) => + { + if (e.EventType == ZipProgressEventType.Saving_BeforeWriteEntry) + { + OnPublishProgress(e.EntriesSaved + 1, e.EntriesTotal, $"Compressing files {(((double)(e.EntriesSaved + 1) / (double)e.EntriesTotal) * 100d).ToString("0.0")}%...", true); + } + }; + + zip.Save(tempFile); + } + + OnPublishProgress(0, 100, $"Starting version upload..."); + + using (StorageBlobUploader uploader = new StorageBlobUploader(response.BlobAddress, tempFile)) + { + uploader.Progress += (x, e) => + { + OnPublishProgress(e.Current, e.Total, $"Uploading to storage {(((double)e.Current / (double)e.Total) * 100d).ToString("0.0")}%...", true); + }; + + uploader.Upload().Wait(); + } + + OnPublishProgress(100, 100, $"Finalizing version upload..."); + + _client.NotifyUploadCompleted(new UploadCompletedRequest() + { + Token = response.Token, + }).Wait(); + + remote_version = GetRemoteVersion().Result; + local_version = GetLocalVersion(); + + OnPublishProgress(0, 0, $"Remote version: {remote_version}"); + OnPublishProgress(0, 0, $"Local version: {local_version}"); + + if (remote_version != local_version) + { + throw new InvalidOperationException("The remote version does not seems to have been updated."); + } + + OnPublishProgress(0, 0, "Version published successfully."); + } + catch (Exception ex) + { + OnPublishProgress(0, 100, $"Failed: {ex.Message}"); + throw ex; + } + finally + { + PathHelper.TryDeleteFile(tempFile); + } + }); + } + + /// <summary> + /// Raises the publish progress event. + /// </summary> + /// <param name="progress">The progress.</param> + /// <param name="total">The total.</param> + /// <param name="message">The message.</param> + protected virtual void OnPublishProgress(double progress, double total, String message, bool singleLine = false) + { + PublishProgress?.Invoke(this, new PublishProgressEventArgs() + { + Progress = progress, + Total = total, + Message = message, + SingleLineRecommended = singleLine, + }); + } + } +} diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Publish/PublishOptions.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Publish/PublishOptions.cs new file mode 100644 index 000000000..047d7c0b4 --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Publish/PublishOptions.cs @@ -0,0 +1,87 @@ +using CommandLine; +using CommandLine.Text; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Tango.Core; +using Tango.Web; + +namespace Tango.MachineStudio.Common.Publish +{ + public class PublishOptions : ExtendedObject + { + public event EventHandler EnvironmentChanged; + public event EventHandler BuidConfigChanged; + public event EventHandler BasicInfoChanged; + + private String basePath; + [Option("path", HelpText = "Specifies the application base path.", Required = false)] + public String BasePath + { + get { return basePath; } + set { basePath = value; RaisePropertyChangedAuto(); } + } + + private String _buildConfig; + [Option("build", HelpText = "Specifies the build configuration.", Required = false, DefaultValue = "Release")] + public String BuildConfig + { + get { return _buildConfig; } + set { _buildConfig = value; RaisePropertyChangedAuto(); BuidConfigChanged?.Invoke(this, new EventArgs()); } + } + + private String _email; + [Option("email", HelpText = "Email account used for login to the machine service.", Required = true)] + public String Email + { + get { return _email; } + set { _email = value; RaisePropertyChangedAuto(); BasicInfoChanged?.Invoke(this, new EventArgs()); } + } + + private String _password; + [Option("pass", HelpText = "Password used for login to the machine service.", Required = true)] + public String Password + { + get { return _password; } + set { _password = value; RaisePropertyChangedAuto(); BasicInfoChanged?.Invoke(this, new EventArgs()); } + } + + private String _comments; + [Option("comments", HelpText = "Optional comments that are attached to this release.", Required = false, DefaultValue = "No comments.")] + public String Comments + { + get { return _comments; } + set { _comments = value; RaisePropertyChangedAuto(); BasicInfoChanged?.Invoke(this, new EventArgs()); } + } + + private DeploymentSlot _environment; + [Option("env", HelpText = "Specifies the target environment to publish.", Required = true)] + public DeploymentSlot Environment + { + get { return _environment; } + set { _environment = value; RaisePropertyChangedAuto(); EnvironmentChanged?.Invoke(this, new EventArgs()); } + } + + private String _installerProject; + [Option("installer-project-file", HelpText = "Specifies the advanced installer project file to build and upload.", Required = false)] + public String InstallerProject + { + get { return _installerProject; } + set { _installerProject = value; RaisePropertyChangedAuto(); } + } + + public PublishOptions() + { + BasePath = AppDomain.CurrentDomain.BaseDirectory + "..\\"; + BuildConfig = "Release"; + } + + public String GetApplicationPath() + { + return Path.Combine(BasePath, BuildConfig); + } + } +} diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Publish/PublishProgressEventArgs.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Publish/PublishProgressEventArgs.cs new file mode 100644 index 000000000..ff550b9de --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Publish/PublishProgressEventArgs.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Tango.MachineStudio.Common.Publish +{ + public class PublishProgressEventArgs : EventArgs + { + public double Progress { get; set; } + public double Total { get; set; } + public String Message { get; set; } + public bool SingleLineRecommended { get; set; } + } +} diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Tango.MachineStudio.Common.csproj b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Tango.MachineStudio.Common.csproj index aff4c056c..48c78e865 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Tango.MachineStudio.Common.csproj +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Tango.MachineStudio.Common.csproj @@ -31,6 +31,9 @@ <WarningLevel>4</WarningLevel> </PropertyGroup> <ItemGroup> + <Reference Include="CommandLine, Version=1.9.71.2, Culture=neutral, PublicKeyToken=de6f01bd326f8c32, processorArchitecture=MSIL"> + <HintPath>..\..\packages\CommandLineParser.1.9.71\lib\net45\CommandLine.dll</HintPath> + </Reference> <Reference Include="EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL"> <HintPath>..\..\packages\EntityFramework.6.2.0\lib\net45\EntityFramework.dll</HintPath> </Reference> @@ -40,6 +43,9 @@ <Reference Include="Google.Protobuf, Version=3.4.1.0, Culture=neutral, PublicKeyToken=a7d26565bac4d604, processorArchitecture=MSIL"> <HintPath>..\..\packages\Google.Protobuf.3.4.1\lib\net45\Google.Protobuf.dll</HintPath> </Reference> + <Reference Include="Ionic.Zip, Version=1.9.1.8, Culture=neutral, PublicKeyToken=edbe51ad942a3f5c, processorArchitecture=MSIL"> + <HintPath>..\..\packages\Ionic.Zip.1.9.1.8\lib\Ionic.Zip.dll</HintPath> + </Reference> <Reference Include="MahApps.Metro, Version=1.5.0.23, Culture=neutral, PublicKeyToken=f4fb5a3c4d1e5b4f, processorArchitecture=MSIL"> <HintPath>..\..\packages\MahApps.Metro.1.5.0\lib\net45\MahApps.Metro.dll</HintPath> </Reference> @@ -49,6 +55,8 @@ <Reference Include="MaterialDesignThemes.Wpf, Version=2.3.1.953, Culture=neutral, processorArchitecture=MSIL"> <HintPath>..\..\packages\MaterialDesignThemes.2.3.1.953\lib\net45\MaterialDesignThemes.Wpf.dll</HintPath> </Reference> + <Reference Include="Microsoft.SqlServer.AzureStorageEnum, Version=14.100.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL" /> + <Reference Include="Microsoft.WindowsAzure.Storage, Version=4.3.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" /> <Reference Include="System" /> <Reference Include="System.ComponentModel.DataAnnotations" /> <Reference Include="System.Data" /> @@ -76,8 +84,8 @@ <Link>GlobalVersionInfo.cs</Link> </Compile> <Compile Include="Authentication\AuthenticationLoginResult.cs" /> - <Compile Include="Authentication\LoginRequest.cs" /> - <Compile Include="Authentication\LoginResponse.cs" /> + <Compile Include="Web\LoginRequest.cs" /> + <Compile Include="Web\LoginResponse.cs" /> <Compile Include="AutoComplete\MachinesProvider.cs" /> <Compile Include="Automation\Developer.cs" /> <Compile Include="Automation\UI.cs" /> @@ -110,6 +118,9 @@ <Compile Include="Navigation\INavigationObjectReceiver.cs" /> <Compile Include="Navigation\INavigationResultProvider.cs" /> <Compile Include="Notifications\BarItem.cs" /> + <Compile Include="Publish\MachineStudioPublisher.cs" /> + <Compile Include="Publish\PublishOptions.cs" /> + <Compile Include="Publish\PublishProgressEventArgs.cs" /> <Compile Include="Speech\DefaultSpeechProvider.cs" /> <Compile Include="Speech\ISpeechProvider.cs" /> <Compile Include="StudioApplication\IStudioApplicationManager.cs" /> @@ -119,19 +130,18 @@ <Compile Include="StudioModuleBase.cs" /> <Compile Include="StudioViewModel.cs" /> <Compile Include="Threading\IDispatcherProvider.cs" /> - <Compile Include="Update\DownloadLatestVersionResponse.cs" /> - <Compile Include="Update\DownloadLatestVersionRequest.cs" /> - <Compile Include="Update\CheckForUpdatesResponse.cs" /> - <Compile Include="Update\CheckForUpdatesRequest.cs" /> - <Compile Include="Update\IMachineStudioUpdateService.cs" /> - <Compile Include="Update\LatestVersionRequest.cs" /> - <Compile Include="Update\LatestVersionResponse.cs" /> - <Compile Include="Update\MachineStudioUpdateService.cs" /> - <None Include="Update\UpdateServiceHelper.cs" /> - <Compile Include="Update\UploadCompletedRequest.cs" /> - <Compile Include="Update\UploadCompletedResponse.cs" /> - <Compile Include="Update\UploadVersionRequest.cs" /> - <Compile Include="Update\UploadVersionResponse.cs" /> + <Compile Include="Web\DownloadLatestVersionResponse.cs" /> + <Compile Include="Web\DownloadLatestVersionRequest.cs" /> + <Compile Include="Web\CheckForUpdatesResponse.cs" /> + <Compile Include="Web\CheckForUpdatesRequest.cs" /> + <Compile Include="Web\LatestVersionRequest.cs" /> + <Compile Include="Web\LatestVersionResponse.cs" /> + <Compile Include="Web\MachineStudioWebClient.cs" /> + <Compile Include="Web\MachineStudioWebClientBase.cs" /> + <Compile Include="Web\UploadCompletedRequest.cs" /> + <Compile Include="Web\UploadCompletedResponse.cs" /> + <Compile Include="Web\UploadVersionRequest.cs" /> + <Compile Include="Web\UploadVersionResponse.cs" /> <Compile Include="ValidationRules\Required.cs" /> <Compile Include="Video\DefaultVideoCaptureProvider.cs" /> <Compile Include="Video\IVideoCaptureProvider.cs" /> @@ -195,7 +205,9 @@ </EmbeddedResource> <None Include="app.config" /> <Resource Include="Fonts\digital-7.ttf" /> - <None Include="packages.config" /> + <None Include="packages.config"> + <SubType>Designer</SubType> + </None> <None Include="Properties\Settings.settings"> <Generator>SettingsSingleFileGenerator</Generator> <LastGenOutput>Settings.Designer.cs</LastGenOutput> diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Update/IMachineStudioUpdateService.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Update/IMachineStudioUpdateService.cs deleted file mode 100644 index f9462009a..000000000 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Update/IMachineStudioUpdateService.cs +++ /dev/null @@ -1,24 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Runtime.Serialization; -using System.ServiceModel; -using System.Text; -using System.Threading.Tasks; -using Tango.MachineStudio.Common.Update; - -namespace Tango.MachineStudio.Common.Update -{ - public interface IMachineStudioUpdateService - { - Task<CheckForUpdatesResponse> CheckForUpdates(CheckForUpdatesRequest request); - - Task<DownloadLatestVersionResponse> DownloadLatestVersion(DownloadLatestVersionRequest request); - - Task<UploadVersionResponse> UploadVersion(UploadVersionRequest request); - - Task<UploadCompletedResponse> NotifyUploadCompleted(UploadCompletedRequest request); - - Task<LatestVersionResponse> GetLatestVersion(LatestVersionRequest request); - } -} diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Update/MachineStudioUpdateService.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Update/MachineStudioUpdateService.cs deleted file mode 100644 index 79dd2ec96..000000000 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Update/MachineStudioUpdateService.cs +++ /dev/null @@ -1,51 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Tango.Settings; -using Tango.Transport.Web; - -namespace Tango.MachineStudio.Common.Update -{ - public class MachineStudioUpdateService : IMachineStudioUpdateService - { - private WebTransportClient _client; - - public MachineStudioUpdateService() - { - - _client = new WebTransportClient(); - } - - public Task<CheckForUpdatesResponse> CheckForUpdates(CheckForUpdatesRequest request) - { - return _client.PostJson<CheckForUpdatesRequest, CheckForUpdatesResponse>(GetAddress() + "CheckForUpdates", request); - } - - public Task<UploadVersionResponse> UploadVersion(UploadVersionRequest request) - { - return _client.PostJson<UploadVersionRequest, UploadVersionResponse>(GetAddress() + "UploadVersion", request); - } - - public Task<UploadCompletedResponse> NotifyUploadCompleted(UploadCompletedRequest request) - { - return _client.PostJson<UploadCompletedRequest, UploadCompletedResponse>(GetAddress() + "NotifyUploadCompleted", request); - } - - public Task<LatestVersionResponse> GetLatestVersion(LatestVersionRequest request) - { - return _client.PostJson<LatestVersionRequest, LatestVersionResponse>(GetAddress() + "GetLatestVersion", request); - } - - private String GetAddress() - { - return SettingsManager.Default.GetOrCreate<MachineStudioSettings>().GetMachineServiceAddress() + "/api/MachineStudio/"; - } - - public Task<DownloadLatestVersionResponse> DownloadLatestVersion(DownloadLatestVersionRequest request) - { - return _client.PostJson<DownloadLatestVersionRequest, DownloadLatestVersionResponse>(GetAddress() + "DownloadLatestVersion", request); - } - } -} diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Update/UpdateServiceHelper.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Update/UpdateServiceHelper.cs deleted file mode 100644 index 067e4470d..000000000 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Update/UpdateServiceHelper.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.ServiceModel; -using System.Text; -using System.Threading.Tasks; -using Tango.Settings; - -namespace Tango.MachineStudio.Common.Update -{ - public static class UpdateServiceHelper - { - public static ChannelFactory<IMachineStudioUpdateService> GetUpdateServiceChannel() - { - BasicHttpBinding binding = new BasicHttpBinding(BasicHttpSecurityMode.None); - binding.ReceiveTimeout = TimeSpan.FromSeconds(60); - binding.SendTimeout = TimeSpan.FromSeconds(60); - binding.MaxBufferPoolSize = 6553600; - binding.MaxBufferSize = 6553600; - binding.MaxReceivedMessageSize = 6553600; - binding.ReaderQuotas.MaxDepth = 6553600; - binding.ReaderQuotas.MaxStringContentLength = 6553600; - binding.ReaderQuotas.MaxArrayLength = 6553600; - binding.ReaderQuotas.MaxBytesPerRead = 6553600; - - return new ChannelFactory<IMachineStudioUpdateService>(binding, SettingsManager.Default.GetOrCreate<MachineStudioSettings>().UpdateServiceAddress); - } - } -} diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Update/CheckForUpdatesRequest.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/CheckForUpdatesRequest.cs index e31a7f59e..4f9576f50 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Update/CheckForUpdatesRequest.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/CheckForUpdatesRequest.cs @@ -6,7 +6,7 @@ using System.Text; using System.Threading.Tasks; using Tango.Transport.Web; -namespace Tango.MachineStudio.Common.Update +namespace Tango.MachineStudio.Common.Web { public class CheckForUpdatesRequest : WebRequestSecureMessage { diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Update/CheckForUpdatesResponse.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/CheckForUpdatesResponse.cs index 450236f79..51608e6c4 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Update/CheckForUpdatesResponse.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/CheckForUpdatesResponse.cs @@ -6,7 +6,7 @@ using System.Text; using System.Threading.Tasks; using Tango.Transport.Web; -namespace Tango.MachineStudio.Common.Update +namespace Tango.MachineStudio.Common.Web { public class CheckForUpdatesResponse : WebResponseMessage { diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Update/DownloadLatestVersionRequest.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/DownloadLatestVersionRequest.cs index 98aa9f1a4..d63654726 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Update/DownloadLatestVersionRequest.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/DownloadLatestVersionRequest.cs @@ -5,7 +5,7 @@ using System.Text; using System.Threading.Tasks; using Tango.Transport.Web; -namespace Tango.MachineStudio.Common.Update +namespace Tango.MachineStudio.Common.Web { public class DownloadLatestVersionRequest : WebRequestSecureMessage { diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Update/DownloadLatestVersionResponse.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/DownloadLatestVersionResponse.cs index f85999f3d..3209b9a2f 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Update/DownloadLatestVersionResponse.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/DownloadLatestVersionResponse.cs @@ -5,7 +5,7 @@ using System.Text; using System.Threading.Tasks; using Tango.Transport.Web; -namespace Tango.MachineStudio.Common.Update +namespace Tango.MachineStudio.Common.Web { public class DownloadLatestVersionResponse : WebResponseMessage { diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Update/LatestVersionRequest.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/LatestVersionRequest.cs index b4e7bd975..59bb71db4 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Update/LatestVersionRequest.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/LatestVersionRequest.cs @@ -6,7 +6,7 @@ using System.Text; using System.Threading.Tasks; using Tango.Transport.Web; -namespace Tango.MachineStudio.Common.Update +namespace Tango.MachineStudio.Common.Web { public class LatestVersionRequest : WebRequestMessage { diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Update/LatestVersionResponse.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/LatestVersionResponse.cs index b90cbf370..7d43128f1 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Update/LatestVersionResponse.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/LatestVersionResponse.cs @@ -6,7 +6,7 @@ using System.Text; using System.Threading.Tasks; using Tango.Transport.Web; -namespace Tango.MachineStudio.Common.Update +namespace Tango.MachineStudio.Common.Web { public class LatestVersionResponse : WebResponseMessage { diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Authentication/LoginRequest.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/LoginRequest.cs index 94fe7f5e2..577f5e208 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Authentication/LoginRequest.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/LoginRequest.cs @@ -5,7 +5,7 @@ using System.Text; using System.Threading.Tasks; using Tango.Transport.Web; -namespace Tango.MachineStudio.Common.Authentication +namespace Tango.MachineStudio.Common.Web { public class LoginRequest : WebRequestMessage { diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Authentication/LoginResponse.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/LoginResponse.cs index e1d9c615a..78c7bc560 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Authentication/LoginResponse.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/LoginResponse.cs @@ -5,13 +5,13 @@ using System.Text; using System.Threading.Tasks; using Tango.Core; using Tango.Transport.Web; +using Tango.Web.Authentication; -namespace Tango.MachineStudio.Common.Authentication +namespace Tango.MachineStudio.Common.Web { - public class LoginResponse : WebResponseMessage + public class LoginResponse : WebTokenResponse { public DataSource DataSource { get; set; } - public String Token { get; set; } public bool VersionChangeRequired { get; set; } public String RequiredVersion { get; set; } } diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/MachineStudioWebClient.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/MachineStudioWebClient.cs new file mode 100644 index 000000000..02276d641 --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/MachineStudioWebClient.cs @@ -0,0 +1,33 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Tango.Settings; +using Tango.Web; +using Tango.Web.Authentication; + +namespace Tango.MachineStudio.Common.Web +{ + public class MachineStudioWebClient : MachineStudioWebClientBase + { + public MachineStudioWebClient(DeploymentSlot environment) : base(environment) + { + } + + public MachineStudioWebClient(DeploymentSlot environment, WebToken token) : base(environment, token) + { + + } + + public MachineStudioWebClient(WebToken token) : this(SettingsManager.Default.GetOrCreate<MachineStudioSettings>().DeploymentSlot, token) + { + + } + + public MachineStudioWebClient() : this(null) + { + + } + } +} diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/MachineStudioWebClientBase.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/MachineStudioWebClientBase.cs new file mode 100644 index 000000000..dc5a14856 --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/MachineStudioWebClientBase.cs @@ -0,0 +1,79 @@ + +using System.Threading.Tasks; +using Tango.Web; +using Tango.Web.Authentication; + +namespace Tango.MachineStudio.Common.Web +{ + /// <summary> + /// Represents a machine service MachineStudio web client. + /// </summary> + /// <seealso cref="Tango.Web.TangoWebClient" /> + public abstract class MachineStudioWebClientBase : TangoWebClient<Tango.MachineStudio.Common.Web.LoginRequest, Tango.MachineStudio.Common.Web.LoginResponse> + { + /// <summary> + /// Initializes a new instance of the <see cref="MachineStudioWebClientBase"/> class. + /// </summary> + /// <param name="environment">The environment.</param> + /// <param name="token">Existing token.</param> + public MachineStudioWebClientBase(DeploymentSlot environment, WebToken token) : base(environment, "MachineStudio", token) + { + + } + + /// <summary> + /// Initializes a new instance of the <see cref="MachineStudioWebClientBase"/> class. + /// </summary> + /// <param name="environment">The environment.</param> + public MachineStudioWebClientBase(DeploymentSlot environment) : this(environment, null) + { + + } + + /// <summary> + /// Executes the CheckForUpdates action and returns Tango.MachineStudio.Common.Web.CheckForUpdatesResponse. + /// </summary> + /// <returns></returns> + public Task<Tango.MachineStudio.Common.Web.CheckForUpdatesResponse> CheckForUpdates(Tango.MachineStudio.Common.Web.CheckForUpdatesRequest request) + { + return Post<Tango.MachineStudio.Common.Web.CheckForUpdatesRequest, Tango.MachineStudio.Common.Web.CheckForUpdatesResponse>("CheckForUpdates", request); + } + + /// <summary> + /// Executes the DownloadLatestVersion action and returns Tango.MachineStudio.Common.Web.DownloadLatestVersionResponse. + /// </summary> + /// <returns></returns> + public Task<Tango.MachineStudio.Common.Web.DownloadLatestVersionResponse> DownloadLatestVersion(Tango.MachineStudio.Common.Web.DownloadLatestVersionRequest request) + { + return Post<Tango.MachineStudio.Common.Web.DownloadLatestVersionRequest, Tango.MachineStudio.Common.Web.DownloadLatestVersionResponse>("DownloadLatestVersion", request); + } + + /// <summary> + /// Executes the UploadVersion action and returns Tango.MachineStudio.Common.Web.UploadVersionResponse. + /// </summary> + /// <returns></returns> + public Task<Tango.MachineStudio.Common.Web.UploadVersionResponse> UploadVersion(Tango.MachineStudio.Common.Web.UploadVersionRequest request) + { + return Post<Tango.MachineStudio.Common.Web.UploadVersionRequest, Tango.MachineStudio.Common.Web.UploadVersionResponse>("UploadVersion", request); + } + + /// <summary> + /// Executes the NotifyUploadCompleted action and returns Tango.MachineStudio.Common.Web.UploadCompletedResponse. + /// </summary> + /// <returns></returns> + public Task<Tango.MachineStudio.Common.Web.UploadCompletedResponse> NotifyUploadCompleted(Tango.MachineStudio.Common.Web.UploadCompletedRequest request) + { + return Post<Tango.MachineStudio.Common.Web.UploadCompletedRequest, Tango.MachineStudio.Common.Web.UploadCompletedResponse>("NotifyUploadCompleted", request); + } + + /// <summary> + /// Executes the GetLatestVersion action and returns Tango.MachineStudio.Common.Web.LatestVersionResponse. + /// </summary> + /// <returns></returns> + public Task<Tango.MachineStudio.Common.Web.LatestVersionResponse> GetLatestVersion(Tango.MachineStudio.Common.Web.LatestVersionRequest request) + { + return Post<Tango.MachineStudio.Common.Web.LatestVersionRequest, Tango.MachineStudio.Common.Web.LatestVersionResponse>("GetLatestVersion", request); + } + + } +} diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Update/UploadCompletedRequest.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/UploadCompletedRequest.cs index d23d57351..48f5b2a6e 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Update/UploadCompletedRequest.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/UploadCompletedRequest.cs @@ -6,10 +6,10 @@ using System.Text; using System.Threading.Tasks; using Tango.Transport.Web; -namespace Tango.MachineStudio.Common.Update +namespace Tango.MachineStudio.Common.Web { public class UploadCompletedRequest : WebRequestSecureMessage { - + public String Token { get; set; } } } diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Update/UploadCompletedResponse.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/UploadCompletedResponse.cs index 89850e3e5..a290cf642 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Update/UploadCompletedResponse.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/UploadCompletedResponse.cs @@ -5,7 +5,7 @@ using System.Text; using System.Threading.Tasks; using Tango.Transport.Web; -namespace Tango.MachineStudio.Common.Update +namespace Tango.MachineStudio.Common.Web { public class UploadCompletedResponse : WebResponseMessage { diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Update/UploadVersionRequest.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/UploadVersionRequest.cs index fedb586ba..33577deb2 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Update/UploadVersionRequest.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/UploadVersionRequest.cs @@ -6,14 +6,10 @@ using System.Text; using System.Threading.Tasks; using Tango.Transport.Web; -namespace Tango.MachineStudio.Common.Update +namespace Tango.MachineStudio.Common.Web { - public class UploadVersionRequest : WebRequestMessage + public class UploadVersionRequest : WebRequestSecureMessage { - public String Email { get; set; } - - public String Password { get; set; } - public String Version { get; set; } public String Comments { get; set; } diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Update/UploadVersionResponse.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/UploadVersionResponse.cs index 4d13fc6ad..9fb3ab94d 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Update/UploadVersionResponse.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/UploadVersionResponse.cs @@ -6,7 +6,7 @@ using System.Text; using System.Threading.Tasks; using Tango.Transport.Web; -namespace Tango.MachineStudio.Common.Update +namespace Tango.MachineStudio.Common.Web { public class UploadVersionResponse : WebResponseMessage { diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/packages.config b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/packages.config index a0c68600c..f871776f5 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/packages.config +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/packages.config @@ -1,9 +1,11 @@ <?xml version="1.0" encoding="utf-8"?> <packages> + <package id="CommandLineParser" version="1.9.71" targetFramework="net461" /> <package id="CommonServiceLocator" version="1.3" targetFramework="net46" /> <package id="EntityFramework" version="6.2.0" targetFramework="net461" /> <package id="Expression.Blend.Sdk" version="1.0.2" targetFramework="net46" /> <package id="Google.Protobuf" version="3.4.1" targetFramework="net46" /> + <package id="Ionic.Zip" version="1.9.1.8" targetFramework="net461" /> <package id="MahApps.Metro" version="1.5.0" targetFramework="net46" /> <package id="MaterialDesignColors" version="1.1.2" targetFramework="net46" /> <package id="MaterialDesignThemes" version="2.3.1.953" targetFramework="net46" /> |
