예제 #1
0
        private async Task <bool> StartAppAndReturnSuccess(IDvinApp dvinApp)
        {
            var fileSystemService = new FileSystemService();
            var errorsAndInfos    = new ErrorsAndInfos();

            if (!dvinApp.HasAppBeenPublishedAfterLatestSourceChanges(fileSystemService))
            {
                dvinApp.Publish(fileSystemService, true, errorsAndInfos);
                if (errorsAndInfos.AnyErrors())
                {
                    await NavigateToMessage(string.Join("<br>", errorsAndInfos.Errors));

                    return(false);
                }
            }

            if (!dvinApp.HasAppBeenPublishedAfterLatestSourceChanges(fileSystemService))
            {
                await NavigateToMessage($"{Constants.BackbendAppId} has not been published since the latest source code changes");

                return(false);
            }

            vProcess = dvinApp.Start(fileSystemService, errorsAndInfos);
            Wait.Until(() => dvinApp.IsPortListenedTo(), TimeSpan.FromSeconds(30));
            if (errorsAndInfos.AnyErrors())
            {
                await NavigateToMessage(string.Join("<br>", errorsAndInfos.Errors));

                return(false);
            }

            if (dvinApp.IsPortListenedTo())
            {
                return(true);
            }

            await NavigateToMessage($"{Constants.BackbendAppId} started but not listening");

            return(false);
        }
예제 #2
0
        public static Process Start(this IDvinApp dvinApp, IFileSystemService fileSystemService, IErrorsAndInfos errorsAndInfos)
        {
            if (dvinApp.IsPortListenedTo())
            {
                errorsAndInfos.Errors.Add($"Another process already listens to port {dvinApp.Port}");
                return(null);
            }

            if (!fileSystemService.FolderExists(dvinApp.PublishFolder))
            {
                errorsAndInfos.Errors.Add($"Folder \"{dvinApp.PublishFolder}\" not found");
                return(null);
            }

            var runner  = new ProcessStarter();
            var process = runner.StartProcess("dotnet", dvinApp.Executable, dvinApp.PublishFolder, errorsAndInfos);

            return(process);
        }