using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Vrh.ApplicationContainer;
using Vrh.ApplicationContainer.Core;
using Vrh.ApplicationContainer.Control.Contract;
using Vrh.Logger;
using VRH.Common;
using Vrh.iScheduler;
namespace iSchedulerMonitor
{
public class MonitorPlugin : PluginAncestor
{
#region Privates
///
/// iSchedulerMonitor példány
///
private Monitor _monitor;
#endregion Privates
#region Properties
///
/// Plugin Instance azonosító
///
public string InstanceName
{
get
{
return _myData.Id;
}
}
///
/// Plugin Instance verziója
///
public string PluginVersion
{
get
{
return this.GetType().Assembly.Version();
}
}
#endregion Properties
#region Constructor
///
/// Constructor
///
private MonitorPlugin()
{
EndLoad();
}
#endregion Constructor
///
/// Factory
///
/// A példány definiciója
/// Not used in this plugin
///
public static MonitorPlugin MonitorPluginFactory(InstanceDefinition instanceDefinition, object instanceData)
{
var instance = new MonitorPlugin
{
_myData = instanceDefinition
};
return instance;
}
#region Public override methods
#region Start override method
///
/// base.BeginStart meghívása, valamint a plugin elindítása.
/// Vagy példányosítással, vagy egy olyan metódussal, ami elindítja.
/// Célszerűen ha a példányosítás nem sikerül, az FATAL ERROR.
/// De ha csak a plugin elindítása nem sikerül, akkor csak HIBA állapotba kerül a plugin.
///
public override void Start()
{
try
{
BeginStart();
// Implement Plugin logic here
// Ha netán újra indítják, akkor az előzőt el kell dobni!
if (_monitor != null) { _monitor.Dispose(); }
string pluginConfig = string.IsNullOrEmpty(_myData.InstanceConfig) ? _myData.Type.PluginConfig : _myData.InstanceConfig;
string pluginData = _myData.InstanceData == null ? null : (string)_myData.InstanceData;
var logData = new Dictionary
{
{ "Plugin config xml", pluginConfig },
{ "Plugin data xml", pluginData }
};
LogThis("MonitorPlugin started.", logData, null, LogLevel.Debug, this.GetType());
var m_xmlp = new iSchedulerXMLProcessor(pluginConfig, pluginData);
//_monitor = new Monitor(pluginConfig, pluginData);
_monitor = new Monitor(m_xmlp);
_monitor.Start();
base.Start();
}
catch (Exception ex)
{
SetErrorState(ex);
}
}
#endregion Start override method
#region Stop override method
///
/// base.BeginStop és a Dispose meghívása.
///
public override void Stop()
{
base.BeginStop();
try
{
// Implement stop logic here
if (_monitor != null)
{
_monitor.Stop();
_monitor.Dispose();
_monitor = null;
}
base.Stop();
}
catch (Exception ex)
{
SetErrorState(ex);
}
}
#endregion
#region IDisposable Support
protected override void Dispose(bool disposing)
{
if (!disposedValue)
{
if (disposing)
{
try
{
BeginDispose();
// TODO: dispose managed state (managed objects).
_monitor?.Dispose();
}
finally
{
base.Dispose(disposing);
}
}
// TODO: free unmanaged resources (unmanaged objects) and override a finalizer below.
// TODO: set large fields to null.
disposedValue = true;
}
}
// TODO: override a finalizer only if Dispose(bool disposing) above has code to free unmanaged resources.
// ~TestPlugin() {
// // Do not change this code. Put cleanup code in Dispose(bool disposing) above.
// Dispose(false);
// }
// This code added to correctly implement the disposable pattern.
public override void Dispose()
{
// Do not change this code. Put cleanup code in Dispose(bool disposing) above.
Dispose(true);
// TODO: uncomment the following line if the finalizer is overridden above.
// GC.SuppressFinalize(this);
}
#endregion IDisposable Support
#endregion Public override methods
}
}