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);
            }
        }
Exemple #6
0
        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;
        }