From 562cccbfae8a9230aa19490976fb3b39bf79c294 Mon Sep 17 00:00:00 2001 From: Todd Schavey Date: Sun, 2 Jan 2022 18:28:39 -0500 Subject: [PATCH] #647 add to ElectronNET.API Process member interfaces for argv and type --- ElectronNET.API/Process.cs | 91 +++++++++++++++++++++++++---- ElectronNET.Host/api/process.js | 8 +++ ElectronNET.Host/api/process.js.map | 2 +- ElectronNET.Host/api/process.ts | 10 ++++ 4 files changed, 98 insertions(+), 13 deletions(-) diff --git a/ElectronNET.API/Process.cs b/ElectronNET.API/Process.cs index daa692b..887eda3 100644 --- a/ElectronNET.API/Process.cs +++ b/ElectronNET.API/Process.cs @@ -1,5 +1,7 @@ using System.Threading; using System.Threading.Tasks; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; namespace ElectronNET.API { @@ -34,27 +36,92 @@ namespace ElectronNET.API private static readonly object _syncRoot = new(); + /// + /// The process.execPath property returns the absolute pathname of the executable that started the Node.js process. Symbolic links, if any, are resolved. + /// + /// + /// + /// var path = await Electron.Process.ExecPathAsync; + /// + /// + public Task ExecPathAsync + { + get + { + CancellationToken cancellationToken = new(); + cancellationToken.ThrowIfCancellationRequested(); + + var taskCompletionSource = new TaskCompletionSource(); + using (cancellationToken.Register(() => taskCompletionSource.TrySetCanceled())) + { + BridgeConnector.Socket.On("process-execPathCompleted", (text) => + { + BridgeConnector.Socket.Off("process-execPathCompleted"); + taskCompletionSource.SetResult((string) text); + }); + + BridgeConnector.Socket.Emit("process-execPath"); + + return taskCompletionSource.Task; + } + } + } + /// /// TBD /// /// - public async Task GetExecPathAsync(CancellationToken cancellationToken = default) + public Task ArgvAsync { - cancellationToken.ThrowIfCancellationRequested(); - - var taskCompletionSource = new TaskCompletionSource(); - using (cancellationToken.Register(() => taskCompletionSource.TrySetCanceled())) + get { - BridgeConnector.Socket.On("process-execPathCompleted", (text) => + CancellationToken cancellationToken = new(); + cancellationToken.ThrowIfCancellationRequested(); + + var taskCompletionSource = new TaskCompletionSource(); + using (cancellationToken.Register(() => taskCompletionSource.TrySetCanceled())) { - BridgeConnector.Socket.Off("process-execPathCompleted"); - taskCompletionSource.SetResult((string) text); - }); + BridgeConnector.Socket.On("process-argvCompleted", (value) => + { + BridgeConnector.Socket.Off("process-argvCompleted"); + taskCompletionSource.SetResult( ((JArray)value).ToObject() ); + }); - BridgeConnector.Socket.Emit("process-execPath"); + BridgeConnector.Socket.Emit("process-argv"); - return await taskCompletionSource.Task - .ConfigureAwait(false); + return taskCompletionSource.Task; + } + } + } + + /// + /// The process.execPath property returns the absolute pathname of the executable that started the Node.js process. Symbolic links, if any, are resolved. + /// + /// + /// + /// var path = await Electron.Process.ExecPathAsync; + /// + /// + public Task TypeAsync + { + get + { + CancellationToken cancellationToken = new(); + cancellationToken.ThrowIfCancellationRequested(); + + var taskCompletionSource = new TaskCompletionSource(); + using (cancellationToken.Register(() => taskCompletionSource.TrySetCanceled())) + { + BridgeConnector.Socket.On("process-typeCompleted", (text) => + { + BridgeConnector.Socket.Off("process-typeCompleted"); + taskCompletionSource.SetResult((string) text); + }); + + BridgeConnector.Socket.Emit("process-type"); + + return taskCompletionSource.Task; + } } } } diff --git a/ElectronNET.Host/api/process.js b/ElectronNET.Host/api/process.js index 80bdaf7..00c929f 100644 --- a/ElectronNET.Host/api/process.js +++ b/ElectronNET.Host/api/process.js @@ -6,5 +6,13 @@ module.exports = (socket) => { const value = process.execPath; electronSocket.emit('process-execPathCompleted', value); }); + socket.on('process-argv', () => { + const value = process.argv; + electronSocket.emit('process-argvCompleted', value); + }); + socket.on('process-type', () => { + const value = process.type; + electronSocket.emit('process-typeCompleted', value); + }); }; //# sourceMappingURL=process.js.map \ No newline at end of file diff --git a/ElectronNET.Host/api/process.js.map b/ElectronNET.Host/api/process.js.map index e2e659a..1e69e30 100644 --- a/ElectronNET.Host/api/process.js.map +++ b/ElectronNET.Host/api/process.js.map @@ -1 +1 @@ -{"version":3,"file":"process.js","sourceRoot":"","sources":["process.ts"],"names":[],"mappings":";AACA,IAAI,cAAc,CAAC;AAEnB,iBAAS,CAAC,MAAc,EAAE,EAAE;IACxB,cAAc,GAAG,MAAM,CAAC;IAExB,MAAM,CAAC,EAAE,CAAC,kBAAkB,EAAE,GAAG,EAAE;QAC/B,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC;QAC/B,cAAc,CAAC,IAAI,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;AACP,CAAC,CAAC"} \ No newline at end of file +{"version":3,"file":"process.js","sourceRoot":"","sources":["process.ts"],"names":[],"mappings":";AACA,IAAI,cAAc,CAAC;AAEnB,iBAAS,CAAC,MAAc,EAAE,EAAE;IACxB,cAAc,GAAG,MAAM,CAAC;IAExB,MAAM,CAAC,EAAE,CAAC,kBAAkB,EAAE,GAAG,EAAE;QAC/B,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC;QAC/B,cAAc,CAAC,IAAI,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,cAAc,EAAE,GAAG,EAAE;QAC3B,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC;QAC3B,cAAc,CAAC,IAAI,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,cAAc,EAAE,GAAG,EAAE;QAC3B,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC;QAC3B,cAAc,CAAC,IAAI,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;AACP,CAAC,CAAC"} \ No newline at end of file diff --git a/ElectronNET.Host/api/process.ts b/ElectronNET.Host/api/process.ts index a559869..97c0569 100644 --- a/ElectronNET.Host/api/process.ts +++ b/ElectronNET.Host/api/process.ts @@ -8,4 +8,14 @@ export = (socket: Socket) => { const value = process.execPath; electronSocket.emit('process-execPathCompleted', value); }); + + socket.on('process-argv', () => { + const value = process.argv; + electronSocket.emit('process-argvCompleted', value); + }); + + socket.on('process-type', () => { + const value = process.type; + electronSocket.emit('process-typeCompleted', value); + }); };