#647 add initial Process class to ElectronNET.API

This commit is contained in:
Todd Schavey
2022-01-02 16:46:14 -05:00
parent 8e1e184d1e
commit 1406fc1d79
9 changed files with 94 additions and 21 deletions

View File

@@ -88,5 +88,10 @@
/// Control your app in the macOS dock.
/// </summary>
public static Dock Dock { get { return Dock.Instance; } }
/// <summary>
/// Electeon extensions to the Nodejs process object.
/// </summary>
public static Process Process { get { return Process.Instance; } }
}
}

View File

@@ -0,0 +1,61 @@
using System.Threading;
using System.Threading.Tasks;
namespace ElectronNET.API
{
/// <summary>
/// Electron's process object is extended from the Node.js process object. It adds the
/// events, properties, and methods.
/// </summary>
public sealed class Process
{
internal Process() { }
internal static Process Instance
{
get
{
if (_process == null)
{
lock (_syncRoot)
{
if (_process == null)
{
_process = new Process();
}
}
}
return _process;
}
}
private static Process _process;
private static readonly object _syncRoot = new();
/// <summary>
/// TBD
/// </summary>
/// <value></value>
public async Task<string> GetExecPathAsync(CancellationToken cancellationToken = default)
{
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 await taskCompletionSource.Task
.ConfigureAwait(false);
}
}
}
}

View File

@@ -28,6 +28,7 @@ namespace ElectronNET.API
.AddSingleton(provider => HostHook.Instance)
.AddSingleton(provider => PowerMonitor.Instance)
.AddSingleton(provider => NativeTheme.Instance)
.AddSingleton(provider => Dock.Instance);
.AddSingleton(provider => Dock.Instance)
.AddSingleton(provider => Process.Instance);
}
}