using ElectronNET.API.Entities; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Newtonsoft.Json.Serialization; using System.Collections.Generic; using System.Threading.Tasks; namespace ElectronNET.API { public sealed class WindowManager { private static WindowManager _windowManager; internal WindowManager() { } internal static WindowManager Instance { get { if (_windowManager == null) { _windowManager = new WindowManager(); } return _windowManager; } } public IReadOnlyCollection BrowserWindows { get { return _browserWindows.AsReadOnly(); } } private List _browserWindows = new List(); public async Task CreateWindowAsync(string loadUrl = "http://localhost") { return await CreateWindowAsync(new BrowserWindowOptions(), loadUrl); } public Task CreateWindowAsync(BrowserWindowOptions options, string loadUrl = "http://localhost") { var taskCompletionSource = new TaskCompletionSource(); BridgeConnector.Socket.On("BrowserWindowCreated", (id) => { BridgeConnector.Socket.Off("BrowserWindowCreated"); string windowId = id.ToString(); BrowserWindow browserWindow = new BrowserWindow(int.Parse(windowId)); _browserWindows.Add(browserWindow); taskCompletionSource.SetResult(browserWindow); }); if (loadUrl.ToUpper() == "HTTP://LOCALHOST") { loadUrl = $"{loadUrl}:{BridgeSettings.WebPort}"; } BridgeConnector.Socket.Emit("createBrowserWindow", JObject.FromObject(options, _jsonSerializer), loadUrl); return taskCompletionSource.Task; } private JsonSerializer _jsonSerializer = new JsonSerializer() { ContractResolver = new CamelCasePropertyNamesContractResolver(), NullValueHandling = NullValueHandling.Ignore, DefaultValueHandling = DefaultValueHandling.Ignore }; } }