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