diff --git a/WelsonJS.Toolkit/WelsonJS.Launcher/ResourceTools/ChromiumDevTools.cs b/WelsonJS.Toolkit/WelsonJS.Launcher/ResourceTools/ChromiumDevTools.cs index 857c2ac..81feeb3 100644 --- a/WelsonJS.Toolkit/WelsonJS.Launcher/ResourceTools/ChromiumDevTools.cs +++ b/WelsonJS.Toolkit/WelsonJS.Launcher/ResourceTools/ChromiumDevTools.cs @@ -55,7 +55,7 @@ namespace WelsonJS.Launcher.ResourceTools if (endpoint.StartsWith("page/", StringComparison.OrdinalIgnoreCase)) { - // 기본 구성 + // read the variable string baseUrl = Program.GetAppConfig("ChromiumDevToolsPrefix"); if (!Uri.TryCreate(baseUrl, UriKind.Absolute, out Uri uri)) { @@ -66,7 +66,7 @@ namespace WelsonJS.Launcher.ResourceTools string hostname = uri.Host; int port = uri.Port; - // 포트 덮어쓰기: ?port=1234 + // override the port number: ?port=1234 string portQuery = context.Request.QueryString["port"]; if (!string.IsNullOrEmpty(portQuery)) { @@ -74,48 +74,28 @@ namespace WelsonJS.Launcher.ResourceTools if (parsedPort > 0) port = parsedPort; } - // 타임아웃 처리 + // set timeout int timeout = 5; string timeoutConfig = Program.GetAppConfig("ChromiumDevToolsTimeout"); if (!string.IsNullOrEmpty(timeoutConfig)) int.TryParse(timeoutConfig, out timeout); - // 경로 + // targeted WebSocket path string wsPath = "devtools/" + endpoint; - // 본문 읽기 + // read the body messsage string postBody; using (var reader = new StreamReader(context.Request.InputStream, context.Request.ContentEncoding)) + { postBody = await reader.ReadToEndAsync(); - - ClientWebSocket ws; - try - { - ws = await _wsManager.GetOrCreateAsync(hostname, port, wsPath); - } - catch (Exception ex) - { - Server.ServeResource(context, $"WebSocket connection failed: {EscapeXml(ex.Message)}", "application/xml", 502); - return; } + // try to communicate try { - var sendBuffer = Encoding.UTF8.GetBytes(postBody); - var sendToken = timeout == 0 ? CancellationToken.None : new CancellationTokenSource(TimeSpan.FromSeconds(timeout)).Token; - await ws.SendAsync(new ArraySegment(sendBuffer), WebSocketMessageType.Text, true, sendToken); - - var recvBuffer = new byte[4096]; - var recvToken = timeout == 0 ? CancellationToken.None : new CancellationTokenSource(TimeSpan.FromSeconds(timeout)).Token; - var result = await ws.ReceiveAsync(new ArraySegment(recvBuffer), recvToken); - - string response = Encoding.UTF8.GetString(recvBuffer, 0, result.Count); + string response = await _wsManager.SendAndReceiveAsync(hostname, port, wsPath, postBody, timeout); Server.ServeResource(context, response, "application/json", 200); } - catch (OperationCanceledException) - { - Server.ServeResource(context, "Timeout occurred", "application/xml", 504); - } catch (Exception ex) { _wsManager.Remove(hostname, port, wsPath);