using ElectronNET.API.Entities;
using ElectronNET.API.Serialization;
using System.Text.Json;
using System.Threading.Tasks;
namespace ElectronNET.API
{
///
/// Electron's process object is extended from the Node.js process object. It adds the
/// events, properties, and methods.
///
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();
///
/// The process.execPath property returns the absolute pathname of the executable that
/// started the Node.js process. Symbolic links, if any, are resolved.
///
public Task ExecPathAsync
{
get
{
var taskCompletionSource = new TaskCompletionSource();
BridgeConnector.Socket.On("process-execPath-Completed", (result) =>
{
BridgeConnector.Socket.Off("process-execPath-Completed");
taskCompletionSource.SetResult(result.GetString());
});
BridgeConnector.Socket.Emit("process-execPath");
return taskCompletionSource.Task;
}
}
///
/// The process.argv property returns an array containing the command-line arguments passed
/// when the Node.js process was launched. The first element will be process.execPath. See
/// process.argv0 if access to the original value of argv[0] is needed. The second element
/// will be the path to the JavaScript file being executed. The remaining elements will be
/// any additional command-line arguments
///
public Task ArgvAsync
{
get
{
var taskCompletionSource = new TaskCompletionSource();
BridgeConnector.Socket.On("process-argv-Completed", (result) =>
{
BridgeConnector.Socket.Off("process-argv-Completed");
taskCompletionSource.SetResult(result.Deserialize(ElectronJson.Options));
});
BridgeConnector.Socket.Emit("process-argv");
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.
///
public Task TypeAsync
{
get
{
var taskCompletionSource = new TaskCompletionSource();
BridgeConnector.Socket.On("process-type-Completed", (result) =>
{
BridgeConnector.Socket.Off("process-type-Completed");
taskCompletionSource.SetResult(result.GetString());
});
BridgeConnector.Socket.Emit("process-type");
return taskCompletionSource.Task;
}
}
///
/// The process.versions property returns an object listing the version strings of
/// chrome and electron.
///
public Task VersionsAsync
{
get
{
var taskCompletionSource = new TaskCompletionSource();
BridgeConnector.Socket.On("process-versions-Completed", (result) =>
{
BridgeConnector.Socket.Off("process-versions-Completed");
taskCompletionSource.SetResult(result.Deserialize(ElectronJson.Options));
});
BridgeConnector.Socket.Emit("process-versions");
return taskCompletionSource.Task;
}
}
///
/// A Boolean. When app is started by being passed as parameter to the default app, this
/// property is true in the main process, otherwise it is false.
///
public Task DefaultAppAsync
{
get
{
var taskCompletionSource = new TaskCompletionSource();
BridgeConnector.Socket.On("process-defaultApp-Completed", (result) =>
{
BridgeConnector.Socket.Off("process-defaultApp-Completed");
taskCompletionSource.SetResult(result.GetBoolean());
});
BridgeConnector.Socket.Emit("process-defaultApp");
return taskCompletionSource.Task;
}
}
///
/// A Boolean, true when the current renderer context is the "main" renderer frame. If you
/// want the ID of the current frame you should use webFrame.routingId
///
public Task IsMainFrameAsync
{
get
{
var taskCompletionSource = new TaskCompletionSource();
BridgeConnector.Socket.On("process-isMainFrame-Completed", (result) =>
{
BridgeConnector.Socket.Off("process-isMainFrame-Completed");
taskCompletionSource.SetResult(result.GetBoolean());
});
BridgeConnector.Socket.Emit("process-isMainFrame");
return taskCompletionSource.Task;
}
}
///
/// A String representing the path to the resources directory.
///
public Task ResourcesPathAsync
{
get
{
var taskCompletionSource = new TaskCompletionSource();
BridgeConnector.Socket.On("process-resourcesPath-Completed", (result) =>
{
BridgeConnector.Socket.Off("process-resourcesPath-Completed");
taskCompletionSource.SetResult(result.GetString());
});
BridgeConnector.Socket.Emit("process-resourcesPath");
return taskCompletionSource.Task;
}
}
///
/// The number of seconds the current Node.js process has been running. The return value
/// includes fractions of a second. Use Math.floor() to get whole seconds.
///
public Task UpTimeAsync
{
get
{
var taskCompletionSource = new TaskCompletionSource();
BridgeConnector.Socket.On("process-uptime-Completed", (result) =>
{
BridgeConnector.Socket.Off("process-uptime-Completed");
taskCompletionSource.SetResult(result.GetDouble());
});
BridgeConnector.Socket.Emit("process-uptime");
return taskCompletionSource.Task;
}
}
///
/// The PID of the electron process
///
public Task PidAsync
{
get
{
var taskCompletionSource = new TaskCompletionSource();
BridgeConnector.Socket.On("process-pid-Completed", (result) =>
{
BridgeConnector.Socket.Off("process-pid-Completed");
taskCompletionSource.SetResult(result.GetInt32());
});
BridgeConnector.Socket.Emit("process-pid");
return taskCompletionSource.Task;
}
}
///
/// The operating system CPU architecture for which the Node.js binary was compiled
///
public Task ArchAsync
{
get
{
var taskCompletionSource = new TaskCompletionSource();
BridgeConnector.Socket.On("process-arch-Completed", (result) =>
{
BridgeConnector.Socket.Off("process-arch-Completed");
taskCompletionSource.SetResult(result.GetString());
});
BridgeConnector.Socket.Emit("process-arch");
return taskCompletionSource.Task;
}
}
///
/// A string identifying the operating system platform on which the Node.js process is running
///
public Task PlatformAsync
{
get
{
var taskCompletionSource = new TaskCompletionSource();
BridgeConnector.Socket.On("process-platform-Completed", (result) =>
{
BridgeConnector.Socket.Off("process-platform-Completed");
taskCompletionSource.SetResult(result.GetString());
});
BridgeConnector.Socket.Emit("process-platform");
return taskCompletionSource.Task;
}
}
}
}