using System;
using System.Collections.Generic;
using System.Reflection;
using System.Text;
namespace Misuzilla.Applications.TwitterIrcGateway.AddIns
{
///
/// アドインのインターフェース型。
///
///
/// アドインはを継承して、このインターフェースを実装する必要があります。
/// 特別な理由がない限りはを継承してください。
///
public interface IAddIn
{
///
/// アドインが読み込まれ初期化されるためにアドインマネージャから呼び出されます。
///
/// サーバのインスタンス
/// 現在の接続のセッション情報
void Initialize(Server server, Session session);
///
/// アドインが破棄される直前に呼び出されます。
///
void Uninitialize();
}
///
/// 設定情報であることを示す、マーカーインターフェースです。
///
///
/// 設定情報クラスはこのインターフェースを実装する必要があります。
///
public interface IConfiguration
{
}
///
/// カスタム設定情報であることを示すインターフェースです。
///
///
/// 設定情報クラスはこのインターフェースを実装する必要があります。
///
public interface ICustomConfiguration : IConfiguration
{
ICollection GetConfigurationPropertyInfo();
void SetValue(String Name, Object value);
Object GetValue(String Name);
}
///
/// 設定可能なパラメータを表すクラスです。
///
public class ConfigurationPropertyInfo
{
///
/// 設定名
///
public String Name { get; set; }
///
/// 設定の説明
///
public String Description { get; set; }
///
/// 設定の型
///
public Type Type { get; set; }
///
/// 値を取得がプロパティまたはフィールド経由の場合はPropertyInfoまたはFieldInfoを指定します
///
public MemberInfo MemberInfo { get; set; }
///
/// デフォルトの値
///
public Object DefaultValue { get; set; }
///
/// ConfigurationPropertyInfo クラスのインスタンスを作成します。
///
public ConfigurationPropertyInfo()
{
}
///
/// ConfigurationPropertyInfo クラスのインスタンスを作成して指定されたパラメータで初期化します。
///
///
///
///
///
///
public ConfigurationPropertyInfo(String name, String description, Type type, Object defaultValue, MemberInfo memberInfo)
{
Name = name;
Description = description;
Type = type;
DefaultValue = defaultValue;
MemberInfo = memberInfo;
}
///
/// 値を取得します。
///
///
///
public Object GetValue(IConfiguration config)
{
Object value = null;
if (MemberInfo is PropertyInfo)
value = ((PropertyInfo)MemberInfo).GetValue(config, null);
else if (MemberInfo is FieldInfo)
value = ((FieldInfo)MemberInfo).GetValue(config);
else if (config is ICustomConfiguration)
value = ((ICustomConfiguration)config).GetValue(Name);
return value;
}
///
/// 値を設定します。
///
///
///
///
public void SetValue(IConfiguration config, Object value)
{
if (MemberInfo is PropertyInfo)
((PropertyInfo)MemberInfo).SetValue(config, value, null);
else if (MemberInfo is FieldInfo)
((FieldInfo)MemberInfo).SetValue(config, value);
else if (config is ICustomConfiguration)
((ICustomConfiguration)config).SetValue(Name, value);
}
}
///
/// アドインのベースとなる基本的な機能を持ったクラスです。
///
public abstract class AddInBase : MarshalByRefObject, IAddIn
{
///
/// 関連づけられているサーバのインスタンスを取得します。
/// このプロパティは古い形式です。
///
[Obsolete("このプロパティは古い形式です。CurrentServer プロパティを利用してください。")]
protected Server Server { get { return CurrentServer; } }
///
/// 関連づけられているセッション情報のインスタンスを取得します。
/// このプロパティは古い形式です。
///
[Obsolete("このプロパティは古い形式です。CurrentSession プロパティを利用してください。")]
protected Session Session { get { return CurrentSession; } }
///
/// 関連づけられているサーバのインスタンスを取得します。
///
protected Server CurrentServer { get; private set; }
///
/// 関連づけられているセッション情報のインスタンスを取得します。
///
protected Session CurrentSession { get; private set; }
#region IAddIn メンバ
public void Initialize(Server server, Session session)
{
CurrentServer = server;
CurrentSession = session;
Initialize();
}
///
/// アドインが初期化されるときに呼び出されます。このメソッドをオーバーライドして実装します。
///
public virtual void Initialize()
{
}
///
/// アドインが破棄されるときに呼び出されます。既定ではイベントをすべて解除します。
///
///
/// このメソッドをオーバーライドして処理を行うことができますが、必ずベースクラスのUninitializeを呼び出してください。
///
public virtual void Uninitialize()
{
}
#endregion
}
}