From 2b4814ecb5d3db5aea169a25b799c87338a03c91 Mon Sep 17 00:00:00 2001 From: "Namhyeon, Go" Date: Sun, 27 Jul 2025 15:57:05 +0900 Subject: [PATCH 1/2] Add resource server autostart and Chromium config options Introduces ResourceServerAutoStart and ChromiumFileName/ChromiumDevToolsPrefix settings to app.config and resources. Refactors resource server startup logic to support autostart and configurable browser launch. Cleans up related code in MainForm and Program for improved flexibility and maintainability. --- .../WelsonJS.Launcher/MainForm.cs | 37 +++++++++++++------ WelsonJS.Toolkit/WelsonJS.Launcher/Program.cs | 6 +-- .../Properties/Resources.Designer.cs | 36 +++++++++++++----- .../Properties/Resources.resx | 8 +++- .../WelsonJS.Launcher/ResourceServer.cs | 8 +++- WelsonJS.Toolkit/WelsonJS.Launcher/app.config | 4 +- 6 files changed, 72 insertions(+), 27 deletions(-) diff --git a/WelsonJS.Toolkit/WelsonJS.Launcher/MainForm.cs b/WelsonJS.Toolkit/WelsonJS.Launcher/MainForm.cs index 162d26d..ee26002 100644 --- a/WelsonJS.Toolkit/WelsonJS.Launcher/MainForm.cs +++ b/WelsonJS.Toolkit/WelsonJS.Launcher/MainForm.cs @@ -17,7 +17,6 @@ namespace WelsonJS.Launcher public partial class MainForm : Form { private const string _entryFileName = "bootstrap.bat"; - private readonly string _dateTimeFormat; private string _workingDirectory; @@ -26,18 +25,28 @@ namespace WelsonJS.Launcher public MainForm() { + // set the datetime format _dateTimeFormat = Program.GetAppConfig("DateTimeFormat"); + // initialize UI InitializeComponent(); + // Check the user is an Administator if (IsInAdministrator()) { Text += " (Administrator)"; } + // tray icon notifyIcon1.DoubleClick += OnShow; openLauncherToolStripMenuItem.Click += OnShow; exitToolStripMenuItem.Click += OnExit; + + // Autostart the resource server + if (Program.GetAppConfig("ResourceServerAutoStart").ToLower() == "true") + { + RunResourceServer(); + } } protected override void OnFormClosing(FormClosingEventArgs e) @@ -120,12 +129,12 @@ namespace WelsonJS.Launcher string filePath = openFileDialog.FileName; DisableUI(); - Task.Run(() => ExtractAndRun(filePath)); + Task.Run(() => RunAppPackageFile(filePath)); } } } - private void ExtractAndRun(string filePath) + private void RunAppPackageFile(string filePath) { _instanceId = Guid.NewGuid().ToString(); _workingDirectory = Program.GetWorkingDirectory(_instanceId); @@ -160,6 +169,19 @@ namespace WelsonJS.Launcher SafeInvoke(() => EnableUI()); } + private bool RunResourceServer() + { + Program.InitResourceServer(); + + if (!Program._ResourceServer.IsRunning()) + { + Program._ResourceServer.Start(false); + startCodeEditorToolStripMenuItem.Text = "Open the code editor..."; + } + + return Program._ResourceServer.IsRunning(); + } + private void RecordFirstDeployTime(string directory, string instanceId) { // get current time @@ -263,14 +285,7 @@ namespace WelsonJS.Launcher private void startCodeEditorToolStripMenuItem_Click(object sender, EventArgs e) { - Program.StartResourceServer(); - - if (!Program._ResourceServer.IsRunning()) - { - Program._ResourceServer.Start(); - ((ToolStripMenuItem)sender).Text = "Open the code editor..."; - } - else + if (RunResourceServer()) { Program.OpenWebBrowser(Program._ResourceServer.GetPrefix()); } diff --git a/WelsonJS.Toolkit/WelsonJS.Launcher/Program.cs b/WelsonJS.Toolkit/WelsonJS.Launcher/Program.cs index b796fb5..8ba1a16 100644 --- a/WelsonJS.Toolkit/WelsonJS.Launcher/Program.cs +++ b/WelsonJS.Toolkit/WelsonJS.Launcher/Program.cs @@ -146,7 +146,7 @@ namespace WelsonJS.Launcher return workingDirectory; } - public static void StartResourceServer() + public static void InitResourceServer() { lock(typeof(Program)) { @@ -159,7 +159,7 @@ namespace WelsonJS.Launcher public static void OpenWebBrowser(string url) { Uri resourceServerUri = new Uri(GetAppConfig("ResourceServerPrefix")); - Uri devToolsUri = new Uri(GetAppConfig("DevToolsPrefix")); + Uri devToolsUri = new Uri(GetAppConfig("ChromiumDevToolsPrefix")); string userDataDir = Path.Combine(GetAppDataPath(), "EdgeUserProfile"); string remoteAllowOrigins = $"{resourceServerUri.Scheme}://{resourceServerUri.Host}:{resourceServerUri.Port}"; @@ -173,7 +173,7 @@ namespace WelsonJS.Launcher Process.Start(new ProcessStartInfo { - FileName = "msedge.exe", + FileName = Program.GetAppConfig("ChromiumFileName"), Arguments = string.Join(" ", arguments), UseShellExecute = true }); diff --git a/WelsonJS.Toolkit/WelsonJS.Launcher/Properties/Resources.Designer.cs b/WelsonJS.Toolkit/WelsonJS.Launcher/Properties/Resources.Designer.cs index c3ebefd..24f5ca1 100644 --- a/WelsonJS.Toolkit/WelsonJS.Launcher/Properties/Resources.Designer.cs +++ b/WelsonJS.Toolkit/WelsonJS.Launcher/Properties/Resources.Designer.cs @@ -105,6 +105,24 @@ namespace WelsonJS.Launcher.Properties { } } + /// + /// http://localhost:9222/과(와) 유사한 지역화된 문자열을 찾습니다. + /// + internal static string ChromiumDevToolsPrefix { + get { + return ResourceManager.GetString("ChromiumDevToolsPrefix", resourceCulture); + } + } + + /// + /// msedge.exe과(와) 유사한 지역화된 문자열을 찾습니다. + /// + internal static string ChromiumFileName { + get { + return ResourceManager.GetString("ChromiumFileName", resourceCulture); + } + } + /// /// 과(와) 유사한 지역화된 문자열을 찾습니다. /// @@ -141,15 +159,6 @@ namespace WelsonJS.Launcher.Properties { } } - /// - /// http://localhost:9222/과(와) 유사한 지역화된 문자열을 찾습니다. - /// - internal static string DevToolsPrefix { - get { - return ResourceManager.GetString("DevToolsPrefix", resourceCulture); - } - } - /// /// 1.1.1.1과(와) 유사한 지역화된 문자열을 찾습니다. /// @@ -277,6 +286,15 @@ namespace WelsonJS.Launcher.Properties { } } + /// + /// true과(와) 유사한 지역화된 문자열을 찾습니다. + /// + internal static string ResourceServerAutoStart { + get { + return ResourceManager.GetString("ResourceServerAutoStart", resourceCulture); + } + } + /// /// http://localhost:3000/과(와) 유사한 지역화된 문자열을 찾습니다. /// diff --git a/WelsonJS.Toolkit/WelsonJS.Launcher/Properties/Resources.resx b/WelsonJS.Toolkit/WelsonJS.Launcher/Properties/Resources.resx index 7bf3635..c619a4c 100644 --- a/WelsonJS.Toolkit/WelsonJS.Launcher/Properties/Resources.resx +++ b/WelsonJS.Toolkit/WelsonJS.Launcher/Properties/Resources.resx @@ -157,7 +157,7 @@ http://localhost:3000/ - + http://localhost:9222/ @@ -199,4 +199,10 @@ yyyy-MM-dd HH:mm:ss + + true + + + msedge.exe + \ No newline at end of file diff --git a/WelsonJS.Toolkit/WelsonJS.Launcher/ResourceServer.cs b/WelsonJS.Toolkit/WelsonJS.Launcher/ResourceServer.cs index d87f0d3..7ea8dc0 100644 --- a/WelsonJS.Toolkit/WelsonJS.Launcher/ResourceServer.cs +++ b/WelsonJS.Toolkit/WelsonJS.Launcher/ResourceServer.cs @@ -30,6 +30,7 @@ namespace WelsonJS.Launcher private string _prefix; private string _resourceName; private List _tools = new List(); + private static readonly HttpClient _httpClient = new HttpClient(); private static readonly string _defaultMimeType = "application/octet-stream"; private static BlobConfig _blobConfig; @@ -66,7 +67,7 @@ namespace WelsonJS.Launcher return _prefix; } - public void Start() + public void Start(bool IsOpenWebBrowser = true) { if (_isRunning) return; @@ -75,7 +76,10 @@ namespace WelsonJS.Launcher _listener.Start(); // Open the web browser - Program.OpenWebBrowser(_prefix); + if (IsOpenWebBrowser) + { + Program.OpenWebBrowser(_prefix); + } // Run a task with cancellation token _serverTask = Task.Run(() => ListenLoop(_cts.Token)); diff --git a/WelsonJS.Toolkit/WelsonJS.Launcher/app.config b/WelsonJS.Toolkit/WelsonJS.Launcher/app.config index 3e9cad8..59bea5f 100644 --- a/WelsonJS.Toolkit/WelsonJS.Launcher/app.config +++ b/WelsonJS.Toolkit/WelsonJS.Launcher/app.config @@ -2,9 +2,11 @@ + - + + From c3d68e1d2fa9ea17ffcc0e6faa5ce2da713b0b5b Mon Sep 17 00:00:00 2001 From: "Namhyeon, Go" Date: Sun, 27 Jul 2025 16:12:55 +0900 Subject: [PATCH 2/2] Fix typo Fix typo --- WelsonJS.Toolkit/WelsonJS.Launcher/MainForm.cs | 4 ++-- WelsonJS.Toolkit/WelsonJS.Launcher/Program.cs | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/WelsonJS.Toolkit/WelsonJS.Launcher/MainForm.cs b/WelsonJS.Toolkit/WelsonJS.Launcher/MainForm.cs index ee26002..3d78fbe 100644 --- a/WelsonJS.Toolkit/WelsonJS.Launcher/MainForm.cs +++ b/WelsonJS.Toolkit/WelsonJS.Launcher/MainForm.cs @@ -37,7 +37,7 @@ namespace WelsonJS.Launcher Text += " (Administrator)"; } - // tray icon + // Send to the tray (to the background) notifyIcon1.DoubleClick += OnShow; openLauncherToolStripMenuItem.Click += OnShow; exitToolStripMenuItem.Click += OnExit; @@ -171,7 +171,7 @@ namespace WelsonJS.Launcher private bool RunResourceServer() { - Program.InitResourceServer(); + Program.InitializeResourceServer(); if (!Program._ResourceServer.IsRunning()) { diff --git a/WelsonJS.Toolkit/WelsonJS.Launcher/Program.cs b/WelsonJS.Toolkit/WelsonJS.Launcher/Program.cs index 8ba1a16..42f6d07 100644 --- a/WelsonJS.Toolkit/WelsonJS.Launcher/Program.cs +++ b/WelsonJS.Toolkit/WelsonJS.Launcher/Program.cs @@ -146,7 +146,7 @@ namespace WelsonJS.Launcher return workingDirectory; } - public static void InitResourceServer() + public static void InitializeResourceServer() { lock(typeof(Program)) {