diff --git a/WelsonJS.Toolkit/WelsonJS.Launcher/MainForm.cs b/WelsonJS.Toolkit/WelsonJS.Launcher/MainForm.cs index 162d26d..3d78fbe 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)"; } + // Send to the tray (to the background) 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.InitializeResourceServer(); + + 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..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 StartResourceServer() + public static void InitializeResourceServer() { 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 @@ + - + +