public static async Task Main(string[] args) { var host = CreateHostBuilder(args).Build(); _api = host.Services.GetRequiredService <IEliteDangerousApi>(); _socketHandler = host.Services.GetRequiredService <WebSocketHandler>(); _variableService = host.Services.GetRequiredService <VariablesService>(); _eliteVaInstaller = host.Services.GetRequiredService <EliteVaInstaller>(); _log = host.Services.GetRequiredService <ILogger <Program> >(); await _api.InitializeAsync(); // Sub to events _api.Events.AllEvent += async(sender, e) => await Broadcast("Event", e, true, false); // Sub to statuses _api.Cargo.OnChange += async(sender, e) => await Broadcast("Cargo", _api.Cargo, true, true); _api.Market.OnChange += async(sender, e) => await Broadcast("Market", _api.Market, true, true); _api.Modules.OnChange += async(sender, e) => await Broadcast("Modules", _api.Modules, true, true); _api.Outfitting.OnChange += async(sender, e) => await Broadcast("Outfitting", _api.Outfitting, true, true); _api.Shipyard.OnChange += async(sender, e) => await Broadcast("Shipyard", _api.Shipyard, true, true); _api.Ship.OnChange += async(sender, e) => await Broadcast("Status", _api.Ship, true, true); _api.NavRoute.OnChange += async(sender, e) => await Broadcast("NavRoute", _api.NavRoute, true, true); _api.Backpack.OnChange += async(sender, e) => await Broadcast("Backpack", _api.Backpack, true, true); // Sub to options _api.Bindings.OnChange += async(sender, e) => await _socketHandler.Broadcast(new WebSocketMessage("Bindings", RemoveLineEndings(_api.Bindings.ToXml())), true, true); // Send userprofile await _socketHandler.Broadcast(new WebSocketMessage("UserProfile", UserProfile.Get()), true, true); // Send latest eliteva version await _socketHandler.Broadcast(new WebSocketMessage("EliteVA.Latest", await _eliteVaInstaller.GetLatestVersion()), true, true); await _api.StartAsync(); await host.RunAsync(); }
public WebSocketHandler(ILogger <WebSocketHandler> log, IEliteDangerousApi api, EliteVaInstaller eliteVaInstaller) { _log = log; _api = api; _eliteVaInstaller = eliteVaInstaller; _eliteVaInstaller.OnStart += async(sender, e) => { await Broadcast(new WebSocketMessage("EliteVA.Start", null)); }; _eliteVaInstaller.OnProgress += async(sender, e) => { await Broadcast(new WebSocketMessage("EliteVA.Progress", e.ProgressPercentage)); }; _eliteVaInstaller.OnNewTask += async(sender, e) => { await Broadcast(new WebSocketMessage("EliteVA.Task", e)); }; _eliteVaInstaller.OnFinished += async(sender, e) => { await Broadcast(new WebSocketMessage("EliteVA.Finished", null)); }; _eliteVaInstaller.OnError += async(sender, e) => { await Broadcast(new WebSocketMessage("EliteVA.Error", e)); }; _frontendWebSockets = new List <WebSocket>(); _clientWebSockets = new List <WebSocket>(); _pluginWebSockets = new List <WebSocket>(); _frontendCatchupMessages = new List <WebSocketMessage>(); _clientCatchupMessages = new List <WebSocketMessage>(); _pluginCatchupMessages = new List <WebSocketMessage>(); WebSocketLogs.OnLog += async(sender, e) => await Broadcast(new WebSocketMessage("Log", JsonConvert.SerializeObject(e)), WebSocketType.FrontEnd, true, false); }