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);
}
}