#647 add to ElectronNET.API Process member interfaces for argv and type

This commit is contained in:
Todd Schavey
2022-01-02 18:28:39 -05:00
parent 1406fc1d79
commit 562cccbfae
4 changed files with 98 additions and 13 deletions

View File

@@ -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();
/// <summary>
/// The process.execPath property returns the absolute pathname of the executable that started the Node.js process. Symbolic links, if any, are resolved.
/// </summary>
/// <example>
/// <code>
/// var path = await Electron.Process.ExecPathAsync;
/// </code>
/// </example>
public Task<string> ExecPathAsync
{
get
{
CancellationToken cancellationToken = new();
cancellationToken.ThrowIfCancellationRequested();
var taskCompletionSource = new TaskCompletionSource<string>();
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;
}
}
}
/// <summary>
/// TBD
/// </summary>
/// <value></value>
public async Task<string> GetExecPathAsync(CancellationToken cancellationToken = default)
public Task<string[]> ArgvAsync
{
cancellationToken.ThrowIfCancellationRequested();
var taskCompletionSource = new TaskCompletionSource<string>();
using (cancellationToken.Register(() => taskCompletionSource.TrySetCanceled()))
get
{
BridgeConnector.Socket.On("process-execPathCompleted", (text) =>
CancellationToken cancellationToken = new();
cancellationToken.ThrowIfCancellationRequested();
var taskCompletionSource = new TaskCompletionSource<string[]>();
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<string[]>() );
});
BridgeConnector.Socket.Emit("process-execPath");
BridgeConnector.Socket.Emit("process-argv");
return await taskCompletionSource.Task
.ConfigureAwait(false);
return taskCompletionSource.Task;
}
}
}
/// <summary>
/// The process.execPath property returns the absolute pathname of the executable that started the Node.js process. Symbolic links, if any, are resolved.
/// </summary>
/// <example>
/// <code>
/// var path = await Electron.Process.ExecPathAsync;
/// </code>
/// </example>
public Task<string> TypeAsync
{
get
{
CancellationToken cancellationToken = new();
cancellationToken.ThrowIfCancellationRequested();
var taskCompletionSource = new TaskCompletionSource<string>();
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;
}
}
}
}