public TriggerEditorWindow(Int64 deviceValueTriggerId, ZvsContext context) { Log = new DatabaseFeedback(_app.EntityContextConnection) { Source = "Trigger Editor" }; _context = context; _deviceValueTriggerId = deviceValueTriggerId; InitializeComponent(); }
public SceneProperties() { SceneId = 0; Context = new ZvsContext(_app.EntityContextConnection); Log = new DatabaseFeedback(_app.EntityContextConnection) { Source = "Scene Properties" }; if (System.ComponentModel.DesignerProperties.GetIsInDesignMode(this)) return; InitializeComponent(); }
public AdapterManagerWindow() { App = (App)Application.Current; Log = new DatabaseFeedback(App.EntityContextConnection) { Source = "Adapter Manager Window" }; Context = new ZvsContext(App.EntityContextConnection); InitializeComponent(); NotifyEntityChangeContext.ChangeNotifications<Adapter>.OnEntityAdded += AdapterManagerWindow_onEntityAdded; NotifyEntityChangeContext.ChangeNotifications<Adapter>.OnEntityDeleted += AdapterManagerWindow_onEntityDeleted; NotifyEntityChangeContext.ChangeNotifications<Adapter>.OnEntityUpdated += AdapterManagerWindow_onEntityUpdated; }
public DeviceValues(int deviceId) { DeviceId = deviceId; _context = new ZvsContext(_app.EntityContextConnection); Log = new DatabaseFeedback(_app.EntityContextConnection) { Source = "Device Values Viewer" }; InitializeComponent(); NotifyEntityChangeContext.ChangeNotifications<DeviceValue>.OnEntityAdded += DeviceValues_onEntityAdded; NotifyEntityChangeContext.ChangeNotifications<DeviceValue>.OnEntityUpdated += DeviceValues_onEntityUpdated; NotifyEntityChangeContext.ChangeNotifications<DeviceValue>.OnEntityDeleted += DeviceValues_onEntityDeleted; }
public async Task LogEntryLimitMultiThreadedTest() { //Arrange var dbConnection = new StubIEntityContextConnection { NameOrConnectionStringGet = () => "LogEntryLimitMultiThreadedTest" }; Database.SetInitializer(new DropCreateDatabaseAlways<ZvsContext>()); var log = new DatabaseFeedback(dbConnection); var task1 = Task.Run(async () => { for (var i = 0; i < 1500; i++) { await log.ReportInfoFormatAsync(CancellationToken.None, "loop1 {0}", i); } }); var task2 = Task.Run(async () => { for (var i = 0; i < 400; i++) { await log.ReportInfoFormatAsync(CancellationToken.None, "loop2 {0}", i); } }); var task3 = Task.Run(async () => { using (var context = new ZvsContext(dbConnection)) { for (var i = 0; i < 700; i++) { context.LogEntries.Add(new LogEntry { Datetime = DateTime.Now, Level = LogEntryLevel.Info, Message = string.Format("loop3 {0}", i), Source = "Source" }); } await context.SaveChangesAsync(CancellationToken.None); } }); await Task.WhenAll(task1, task2, task3); using (var context = new ZvsContext(dbConnection)) { var currentLogEntryCount = context.LogEntries.Count(); //Assert Assert.IsTrue(currentLogEntryCount == 2000, "Expected 2000 entries and got " + currentLogEntryCount); } }
private async void Window_Loaded(object sender, RoutedEventArgs e) { // Do not load your data at design time. if (DesignerProperties.GetIsInDesignMode(this)) { return; } var log = new DatabaseFeedback(_app.EntityContextConnection) { Source = "Main Window" }; await log.ReportInfoFormatAsync(_app.Cts.Token, "{0} User Interface Loaded", Utils.ApplicationName); dList1.ShowMore = false; Title = Utils.ApplicationNameAndVersion; }
public async Task LogEntryMultipleContextLimitTest() { //Arrange var dbConnection = new StubIEntityContextConnection { NameOrConnectionStringGet = () => "LogEntrySingleContextLimitTest" }; Database.SetInitializer(new DropCreateDatabaseAlways<ZvsContext>()); var log = new DatabaseFeedback(dbConnection); for (var i = 0; i < 2003; i++) { await log.ReportInfoFormatAsync(CancellationToken.None, "hello world {0}", i); } using (var context = new ZvsContext(dbConnection)) { var currentLogEntryCount = context.LogEntries.Count(); var firstentry = await context.LogEntries.OrderBy(o => o.Datetime).FirstAsync(); var lastEntry = await context.LogEntries.OrderByDescending(o => o.Datetime).FirstAsync(); //Aseert Assert.IsTrue(currentLogEntryCount == 2000, "Expected 2000 entries and got " + currentLogEntryCount); Assert.IsTrue(firstentry.Message == "hello world 3", "Expected first entry to start with 3"); Assert.IsTrue(lastEntry.Message == "hello world 2002", "Expected last entry to start with 2002"); } }
public async Task StartAsync(CancellationToken cancellationToken) { if (IsRunning) { await Log.ReportWarningAsync("Cannot start plugin manager because it is already running!", cancellationToken); return; } IsRunning = true; using (var context = new ZvsContext(EntityContextConnection)) { // Iterate the plugins found in dlls foreach (var plugin in Plugins) { //keeps this plugin in scope var zvsPlugin = plugin; //Check Database for this plugin var dbPlugin = await context.Plugins .FirstOrDefaultAsync(p => p.PluginGuid == zvsPlugin.PluginGuid, cancellationToken); var changed = false; if (dbPlugin == null) { dbPlugin = new Plugin { PluginGuid = zvsPlugin.PluginGuid }; context.Plugins.Add(dbPlugin); changed = true; } //Update Name and Description zvsPlugin.IsEnabled = dbPlugin.IsEnabled; if (dbPlugin.Name != zvsPlugin.Name) { dbPlugin.Name = zvsPlugin.Name; changed = true; } if (dbPlugin.Description != zvsPlugin.Description) { dbPlugin.Description = zvsPlugin.Description; changed = true; } if (changed) { var result = await context.TrySaveChangesAsync(cancellationToken); if (result.HasError) { await Log.ReportErrorFormatAsync(cancellationToken, "Plugin not loaded. Error while saving loaded '{0}' plugin to database. {1}", zvsPlugin.Name, result.Message); break; } } await Log.ReportInfoFormatAsync(cancellationToken, "Initializing '{0}'", zvsPlugin.Name); //Plug-in need access to the zvsEngine in order to use the Logger var log = new DatabaseFeedback(EntityContextConnection) { Source = zvsPlugin.Name }; await zvsPlugin.Initialize(log, EntityContextConnection, AdapterManager); //Reload just installed settings var pluginSettings = await context.PluginSettings .Include(o => o.Plugin) .Where(p => p.Plugin.PluginGuid == zvsPlugin.PluginGuid) .ToListAsync(cancellationToken); //Set plug-in settings from database values foreach (var setting in pluginSettings) await SetPluginProperty(plugin, setting.UniqueIdentifier, setting.Value, CancellationToken.None); if (dbPlugin.IsEnabled) await zvsPlugin.StartAsync(); if (!_pluginIdToGuid.ContainsKey(dbPlugin.Id)) _pluginIdToGuid.Add(dbPlugin.Id, dbPlugin.PluginGuid); } } NotifyEntityChangeContext.ChangeNotifications<PluginSetting>.OnEntityUpdated += PluginManager_OnEntityUpdated; }
public DeviceProperties(int deviceId) { Log = new DatabaseFeedback(_app.EntityContextConnection) { Source = "Device Property Window" }; _deviceId = deviceId; InitializeComponent(); }
public async Task StartAsync(CancellationToken cancellationToken) { if (IsRunning) { await Log.ReportWarningAsync("Cannot start plugin manager because it is already running!", cancellationToken); return; } IsRunning = true; using (var context = new ZvsContext(EntityContextConnection)) { // Iterate the plugins found in dlls foreach (var plugin in Plugins) { //keeps this plugin in scope var zvsPlugin = plugin; //Check Database for this plugin var dbPlugin = await context.Plugins .FirstOrDefaultAsync(p => p.PluginGuid == zvsPlugin.PluginGuid, cancellationToken); var changed = false; if (dbPlugin == null) { dbPlugin = new Plugin { PluginGuid = zvsPlugin.PluginGuid }; context.Plugins.Add(dbPlugin); changed = true; } //Update Name and Description zvsPlugin.IsEnabled = dbPlugin.IsEnabled; if (dbPlugin.Name != zvsPlugin.Name) { dbPlugin.Name = zvsPlugin.Name; changed = true; } if (dbPlugin.Description != zvsPlugin.Description) { dbPlugin.Description = zvsPlugin.Description; changed = true; } if (changed) { var result = await context.TrySaveChangesAsync(cancellationToken); if (result.HasError) { await Log.ReportErrorFormatAsync(cancellationToken, "Plugin not loaded. Error while saving loaded '{0}' plugin to database. {1}", zvsPlugin.Name, result.Message); break; } } await Log.ReportInfoFormatAsync(cancellationToken, "Initializing '{0}'", zvsPlugin.Name); //Plug-in need access to the zvsEngine in order to use the Logger var log = new DatabaseFeedback(EntityContextConnection) { Source = zvsPlugin.Name }; await zvsPlugin.Initialize(log, EntityContextConnection, AdapterManager); //Reload just installed settings var pluginSettings = await context.PluginSettings .Include(o => o.Plugin) .Where(p => p.Plugin.PluginGuid == zvsPlugin.PluginGuid) .ToListAsync(cancellationToken); //Set plug-in settings from database values foreach (var setting in pluginSettings) { await SetPluginProperty(plugin, setting.UniqueIdentifier, setting.Value, CancellationToken.None); } if (dbPlugin.IsEnabled) { await zvsPlugin.StartAsync(); } if (!_pluginIdToGuid.ContainsKey(dbPlugin.Id)) { _pluginIdToGuid.Add(dbPlugin.Id, dbPlugin.PluginGuid); } } } NotifyEntityChangeContext.ChangeNotifications <PluginSetting> .OnEntityUpdated += PluginManager_OnEntityUpdated; }