Adapter
|
public class AdapterLoader<T> : ISupportLifecycle, IDisposable, IProvideStatus, IPersistSettings where T : class, IAdapter
The AdapterLoaderT type exposes the following members.
Name | Description | |
---|---|---|
AdapterLoaderT | Initializes a new instance of the AdapterLoaderT class. |
Name | Description | |
---|---|---|
AdapterDirectory | Gets or sets the directory where Adapters are located. | |
AdapterFileExtension | Gets or sets the file extension of the Adapters. | |
AdapterFileFormat | Gets or sets the file format of the Adapters. | |
Adapters | Gets a list of adapters loaded from the AdapterDirectory. | |
AdapterWatcher | Gets the FileSystemWatcher object watching for new adapter assemblies added at runtime. | |
AllowableAdapterMemoryUsage | Gets or sets the memory in megabytes the Adapters are allowed to use before being flagged as offending by the internal monitoring process. | |
AllowableAdapterProcessorUsage | Gets or sets the processor time in % the Adapters are allowed to use before being flagged as offending by the internal monitoring process. | |
AllowableProcessMemoryUsage | Gets or sets the memory in megabytes the current process is allowed to use before the internal monitoring process starts looking for offending Adapters. | |
AllowableProcessProcessorUsage | Gets or sets the processor time in % the current process is allowed to use before the internal monitoring process starts looking for offending Adapters. | |
Enabled | Gets or sets a boolean value that indicates whether the AdapterLoaderT is currently enabled. | |
IsDisposed | Gets a flag that indicates whether the object has been disposed. | |
IsolateAdapters | Gets or sets a boolean value that indicates whether Adapters are loaded in separate AppDomain for isolated execution. | |
MonitorAdapters | Gets or sets a boolean value that indicates whether resource utilization of Adapters executing in isolation is to be monitored. | |
Name | Gets the unique identifier of the AdapterLoaderT. | |
OperationQueue | Gets the ProcessQueueT object to be used for queuing operations to be executed on Adapters. | |
PersistSettings | Gets or sets a boolean value that indicates whether AdapterLoaderT settings are to be saved to the config file. | |
SettingsCategory | Gets or sets the category under which AdapterLoaderT settings are to be saved to the config file if the PersistSettings property is set to true. | |
Status | Gets the descriptive status of the AdapterLoaderT. | |
WatchForAdapters | Gets or sets a boolean value that indicates whether the AdapterDirectory is to be monitored for new Adapters. |
Name | Description | |
---|---|---|
Dispose | Releases all the resources used by the AdapterLoaderT. | |
Dispose(Boolean) | Releases the unmanaged resources used by the AdapterLoaderT and optionally releases the managed resources. | |
Equals | Determines whether the specified object is equal to the current object. (Inherited from Object) | |
ExecuteAdapterOperation | Executes an operation on the adapter with the given data. | |
Finalize |
Releases the unmanaged resources before the AdapterLoaderT is reclaimed by GC.
(Overrides ObjectFinalize) | |
GetHashCode | Serves as the default hash function. (Inherited from Object) | |
GetMemoryUsage | Gets the memory usage in bytes of the specified process. | |
GetProcessorUsage | Gets the % processor usage of the specified process. | |
GetType | Gets the Type of the current instance. (Inherited from Object) | |
Initialize | Initializes the AdapterLoaderT. | |
Initialize(IEnumerableType) | Initializes the AdapterLoaderT. | |
LoadSettings | Loads saved AdapterLoaderT settings from the config file if the PersistSettings property is set to true. | |
MemberwiseClone | Creates a shallow copy of the current Object. (Inherited from Object) | |
MonitorAdapterResources | Monitors the resource utilization of Adapters. | |
OnAdapterCreated | Raises the AdapterCreated event. | |
OnAdapterLoaded | Raises the AdapterLoaded event. | |
OnAdapterLoadException | Raises the AdapterLoadException event. | |
OnAdapterResourceUsageExceeded | Raises the AdapterResourceUsageExceeded event. | |
OnAdapterUnloaded | Raises the AdapterUnloaded event. | |
OnOperationExecutionException | Raises the OperationExecutionException event. | |
ProcessAdapter(String) | Processes the adapterFile by deserializing it. | |
ProcessAdapter(Type) | Processes the adapterType by instantiating it. | |
SaveSettings | Saves AdapterLoaderT settings to the config file if the PersistSettings property is set to true. | |
ToString | Returns a string that represents the current object. (Inherited from Object) |
Name | Description | |
---|---|---|
AdapterCreated | Occurs when a new adapter is found and instantiated. | |
AdapterLoaded | Occurs when a new adapter is loaded to the Adapters list. | |
AdapterLoadException | Occurs when an Exception is encountered when loading an adapter. | |
AdapterResourceUsageExceeded | Occurs when an adapter has exceeded either the AllowableAdapterMemoryUsage or AllowableAdapterProcessorUsage. | |
AdapterUnloaded | Occurs when an existing adapter is unloaded from the Adapters list. | |
Disposed | Occurs when the class has been disposed. | |
OperationExecutionException | Occurs when an Exception is encountered while executing a queued operation on one the Adapters. |
Name | Description | |
---|---|---|
DefaultAdapterDirectory | Specifies the default value for the AdapterDirectory property. | |
DefaultAdapterFileExtension | Specifies the default value for the AdapterFileExtension property. | |
DefaultAdapterFileFormat | Specifies the default value for the AdapterFileFormat property. | |
DefaultAllowableAdapterMemoryUsage | Specifies the default value for the AllowableAdapterMemoryUsage property. | |
DefaultAllowableAdapterProcessorUsage | Specifies the default value for the AllowableAdapterProcessorUsage property. | |
DefaultAllowableProcessMemoryUsage | Specifies the default value for the AllowableProcessMemoryUsage property | |
DefaultAllowableProcessProcessorUsage | Specifies the default value for the AllowableProcessProcessorUsage property. | |
DefaultIsolateAdapters | Specifies the default value for the IsolateAdapters property. | |
DefaultMonitorAdapters | Specifies the default value for the MonitorAdapters property. | |
DefaultWatchForAdapters | Specifies the default value for the WatchForAdapters property. |
Name | Description | |
---|---|---|
GetEnumValueOrDefault |
Gets the enumeration constant for value, if defined in the enumeration, or a default value.
(Defined by EnumExtensions) | |
GetEnumValueOrDefaultT |
Gets the enumeration constant for this value, if defined in the enumeration, or a default value.
(Defined by EnumExtensions) |
using System; using System.Collections.Generic; using System.Text; using System.Threading; using GSF; using GSF.Adapters; using GSF.Security.Cryptography; class Program { static AdapterLoader<PublishAdapterBase> s_adapterLoader; static void Main(string[] args) { // Enable app domain resource monitoring. AppDomain.MonitoringIsEnabled = true; // Load adapters that mimic data publishing. s_adapterLoader = new AdapterLoader<PublishAdapterBase>(); s_adapterLoader.IsolateAdapters = true; s_adapterLoader.MonitorAdapters = true; s_adapterLoader.AdapterFileExtension = "*.exe"; s_adapterLoader.AllowableProcessMemoryUsage = 200; s_adapterLoader.AllowableProcessProcessorUsage = 50; s_adapterLoader.AllowableAdapterMemoryUsage = 100; s_adapterLoader.AllowableAdapterProcessorUsage = 25; s_adapterLoader.AdapterLoaded += OnAdapterLoaded; s_adapterLoader.AdapterUnloaded += OnAdapterUnloaded; s_adapterLoader.AdapterResourceUsageExceeded += OnAdapterResourceUsageExceeded; s_adapterLoader.Initialize(); // Shutdown. Console.ReadLine(); s_adapterLoader.Dispose(); } static void OnAdapterLoaded(object sender, EventArgs<PublishAdapterBase> e) { Console.WriteLine("{0} has been loaded\r\n", e.Argument.GetType().Name); } static void OnAdapterUnloaded(object sender, EventArgs<PublishAdapterBase> e) { Console.WriteLine("{0} has been unloaded\r\n", e.Argument.GetType().Name); } static void OnAdapterResourceUsageExceeded(object sender, GSF.EventArgs<PublishAdapterBase> e) { Console.WriteLine("{0} status:", e.Argument.Name); Console.WriteLine(e.Argument.Status); // Remove the adapter in order to reclaim the resources used by it. lock (s_adapterLoader.Adapters) { s_adapterLoader.Adapters.Remove(e.Argument); } } } /// <summary> /// Base adapter class. /// </summary> public abstract class PublishAdapterBase : Adapter { public PublishAdapterBase() { Data = new List<byte[]>(); } public List<byte[]> Data { get; set; } public override void Initialize() { base.Initialize(); new Thread(Publish).Start(); } protected abstract void Publish(); } /// <summary> /// Adapter that does not manage memory well. /// </summary> public class PublishAdapterA : PublishAdapterBase { protected override void Publish() { while (true) { for (int i = 0; i < 10000; i++) { Data.Add(new byte[10]); } Thread.Sleep(100); } } } /// <summary> /// Adapter that uses the processor in excess. /// </summary> public class PublishAdapterB : PublishAdapterBase { protected override void Publish() { string text = string.Empty; System.Random random = new System.Random(); while (true) { for (int i = 0; i < 10; i++) { for (int j = 0; j < 4; j++) { text += (char)random.Next(256); } Data.Add(Encoding.ASCII.GetBytes(text.Encrypt("C1pH3r", CipherStrength.Aes256)).BlockCopy(0, 1)); } Thread.Sleep(10); } } }