protected virtual void RunPreview(PreviewTask tsk, string launchProfile = null) { try { var arg = launchProfile == null ? "" : $"--launch-profile {launchProfile}"; var process = GetCommandProcess(paths.UIRoot, "dotnet", $"-d run {arg} --no-build"); //process.EnableRaisingEvents = true; process.StartInfo.RedirectStandardOutput = true; // process.StartInfo.RedirectStandardError = true; process.Start(); var outReader = process.StandardOutput; //var errReader = process.StandardError; while (!outReader.EndOfStream)//&& !errReader.EndOfStream) { var outLine = outReader.ReadLine(); //var errLine = errReader.ReadLine(); if (outLine != null) { Out.WriteLine(outLine); if (outLine.GetPatternContents("Process ID: (.*)", out string[] data))
protected virtual Task RunPreviewAsync(PreviewTask tsk, string launchProfile = null) { return(new Task(() => { RunPreview(tsk, launchProfile); })); }
public virtual Result StartPreview(string tenantCode, string launchProfile = null) { var res = new Result(); if (Current != null) { StopPreview(); } try { var folder = Path.Combine(paths.UIRoot, tenantCode); if (!Directory.Exists(folder)) { return new Result { Code = 1, Message = "render_tenant_first" } } ; var otherApps = data.GetAppCodes().Where(d => d != tenantCode); Out.WriteLine("Deleting other tenant files"); foreach (var app in otherApps) { var p = Path.Combine(paths.UIRoot, app); if (Directory.Exists(p)) { DeleteFolder(p, app); } } var dev = Path.Combine(paths.UIRoot, BundleFolder, "dev"); if (Directory.Exists(dev)) { DeleteFolder(dev, "Development bundle"); } var configString = WebpackConfigTemplate.Replace("%TenantCode%", tenantCode); var configPath = Path.Combine(paths.UIRoot, "webpack.config.js"); Out.Write("Changing configuration"); File.WriteAllText(configPath, configString); WriteSuccess(null, SuccessCol); Current = new PreviewTask { TenantCode = tenantCode }; var t = RunPreviewAsync(Current, launchProfile); t.Start(); Current.WaitForStartResult(); if (Current.IsStarted) { var url = Utils.CombineUrl(paths.UIUrl, Current.TenantCode); Out.WriteLine("Preview started on :" + url); res.Message = "tenant_preview_created"; res.Data["Url"] = url; } else { res.Code = 1; Out.WriteLine("Preview failed to start"); res.Message = "failed_to_start"; Current = null; } } catch (Exception ex) { res.SetException(ex); } return(res); }