using System; using Decal.Adapter.Messages; namespace Decal.Adapter; /// /// /// [CLSCompliant(true)] public abstract class Extension : MarshalByRefObject { private DecalExtensionType myExtensionType; private CoreManager myLifetime; private string myPath; private EventHandler directoryResolve; public DecalExtensionType ExtensionType => myExtensionType; public string Path { get { return myPath; } internal set { myPath = value; } } protected CoreManager Core { get { if (myLifetime == null) { myLifetime = CoreManager.Current; } return myLifetime; } } public virtual object ComOM => null; public virtual string ReferenceName => GetType().FullName; [CLSCompliant(false)] protected event EventHandler DirectoryResolve { add { directoryResolve = (EventHandler)Delegate.Combine(directoryResolve, value); } remove { directoryResolve = (EventHandler)Delegate.Remove(directoryResolve, value); } } [CLSCompliant(false)] protected event EventHandler WindowMessage { add { Core.WindowMessage += value; } remove { Core.WindowMessage -= value; } } [CLSCompliant(false)] protected event EventHandler ChatNameClicked { add { Core.ChatNameClicked += value; } remove { Core.ChatNameClicked -= value; } } [CLSCompliant(false)] protected event EventHandler MessageProcessed { add { Core.MessageProcessed += value; } remove { Core.MessageProcessed -= value; } } [CLSCompliant(false)] protected event EventHandler RegionChange3D { add { Core.RegionChange3D += value; } remove { Core.RegionChange3D -= value; } } [CLSCompliant(false)] protected event EventHandler ChatBoxMessage { add { Core.ChatBoxMessage += value; } remove { Core.ChatBoxMessage -= value; } } [CLSCompliant(false)] protected event EventHandler ItemSelected { add { Core.ItemSelected += value; } remove { Core.ItemSelected -= value; } } [CLSCompliant(false)] protected event EventHandler ItemDestroyed { add { Core.ItemDestroyed += value; } remove { Core.ItemDestroyed -= value; } } [CLSCompliant(false)] protected event EventHandler CommandLineText { add { Core.CommandLineText += value; } remove { Core.CommandLineText -= value; } } [CLSCompliant(false)] protected event EventHandler ContainerOpened { add { Core.ContainerOpened += value; } remove { Core.ContainerOpened -= value; } } protected event EventHandler AdapterMessage { add { Core.ExtensionMessage += value; } remove { Core.ExtensionMessage -= value; } } internal Extension(DecalExtensionType type) { myExtensionType = type; } internal void standardEvent(ExtensionEvents evtToFire) { switch (evtToFire) { case ExtensionEvents.Startup: Startup(); break; case ExtensionEvents.Shutdown: Shutdown(); break; case ExtensionEvents.InternalWireup: Wireup(); break; case ExtensionEvents.InternalUnwire: UnWire(); break; } } internal object ResolvePath(string path) { DirectoryResolveEventArgs e = new DirectoryResolveEventArgs(path); if (directoryResolve != null) { try { directoryResolve(this, e); return e.Result; } catch { } } return null; } internal virtual void Wireup() { } internal virtual void UnWire() { } protected abstract void Startup(); protected abstract void Shutdown(); protected void SendAdapterMessage(AdapterMessageEventArgs args) { Core.FireExtensionMessage(this, args); } }