public EliteDangerousAPI(IServiceProvider services) { try { Version = Assembly.GetExecutingAssembly().GetName().Version; _log = services.GetRequiredService <ILogger <EliteDangerousAPI> >(); _config = services.GetRequiredService <IConfiguration>(); _eventProvider = services.GetRequiredService <IEventProvider>(); _eventProcessors = services.GetRequiredService <IEnumerable <IEventProcessor> >(); _journalDirectoryProvider = services.GetRequiredService <IJournalDirectoryProvider>(); _journalProvider = services.GetRequiredService <IJournalProvider>(); _journalProcessor = services.GetRequiredService <IJournalProcessor>(); _statusProvider = services.GetRequiredService <IStatusProvider>(); _statusProcessor = services.GetRequiredService <IStatusProcessor>(); Events = services.GetRequiredService <EventHandler>(); Status = services.GetRequiredService <IShipStatus>(); } catch (Exception ex) { PreInitializationException = ex; } }
private Task InvokeStatusUpdateMethod(RawShipStatus raw, IShipStatus status, string propertyName) { try { var rawValue = raw.GetType().GetProperty(propertyName).GetValue(raw); var statusUpdateProperty = _status.GetType().GetProperty(propertyName).GetValue(_status); var updateMethod = statusUpdateProperty.GetType() .GetMethod("Update", BindingFlags.NonPublic | BindingFlags.Instance); var needsUpdateMethod = statusUpdateProperty.GetType() .GetMethod("NeedsUpdate", BindingFlags.NonPublic | BindingFlags.Instance); var needsUpdate = needsUpdateMethod.Invoke(statusUpdateProperty, new[] { rawValue }); if ((bool)needsUpdate) { _log.LogTrace("Invoking OnChange event for {name} status", propertyName); updateMethod.Invoke(statusUpdateProperty, new[] { this, rawValue }); } } catch (Exception ex) { _log.LogWarning(ex, "Could not update status property {name}", propertyName); } return(Task.CompletedTask); }
public StatusProcessor(ILogger <StatusProcessor> log, IShipStatus status) { _log = log; _status = status; _cache = new Dictionary <string, string>(); }