StreamRelay.NET.exe の乱数生成機能を呼び出しているプラグインの実装方法について説明する
StreamRelay.NET.exe/StreamRelay.NET.x86.exeには、いくつかの機能をプラグインとして実装できるようにインターフェイスを公開している。
今回は、乱数生成機能のインターフェイスを使って、プラグインを作成する方法を記述する。
既存のプラグイン
乱数アルゴリズムのdllを呼び出すこのあたり
プラグイン的には、このあたり。
- Plugins\Plugin.Rei.Random.dll
- Plugins\Plugin.CmdRandom.dll
- Plugins\Plugin.BouncyCastle.Crypto.dll
- Plugins\Win32|64\Plugin.RdRand.x86|x64.dll
- Plugins\Win32|64\CRandom32|64.dll
実装したプラグインの呼び出され方
プラグインで指定された引数を渡されると、乱数生成のオブジェクトを生成して返す。
という感じ。
実装するインターフェイス
以下のインターフェイスを継承したクラスを実装すればよい
- IPlugin.dll 中の jp.dip.rocketeer.Plugins.IPluginRandomEntity インターフェイス
- IPlugin.dll 中の jp.dip.rocketeer.Plugins.IPluginRandom インターフェイス
この2つのインターフェイスを実装すればよい。
jp.dip.rocketeer.Plugins.IPluginRandom インターフェイス
StreamRelay.NET.exe/他のプラグインから、IPluginRandom のCreateRandomEntityメソッドが呼ばれて、IPluginRandomEntityオブジェクトを生成して返す。
そしてIPluginRandomEntityが乱数を生成する。
という感じ。
具体的には、**IPluginRandomEntity CreateRandomEntity(String iRandomArgorithmName, ref String errMsg)**が、StreamRelay.NET.exe/他のプラグインから呼び出されるので、IPluginRandomEntityのインスタンスを返す。
そして、IPluginRandomEntity#GetRand()/IPluginRandomEntity#GetRand(UInt32) によって、乱数が生成される。
という感じ。
jp.dip.rocketeer.Plugins.IPluginRandom インターフェイスで定義しているメソッド/プロパティ
実装する必要があるのは以下
jp.dip.rocketeer.Plugins.IPluginRandomインターフェイスで定義されているのは、以下のとおり
- Dictionary<String, String> ListDescription()
- 引数文字列などを返す
- IPluginRandomEntity[] CreateAllRandomEntity()
- 全ての乱数ライブラリをロードする
- IPluginRandomEntity CreateRandomEntity(String iRandomArgorithmName, ref String errMsg)
- 名称(ListDescription()のKeyの方だと思う)から乱数オブジェクトの実体を作成する
jp.dip.rocketeer.Plugins.IPluginBaseインターフェイスで定義されている分については、インターフェイス IPluginBase についてを参照
jp.dip.rocketeer.Plugins.IPluginRandomEntity インターフェイスで定義しているメソッド/プロパティ
実装する必要があるのは以下
jp.dip.rocketeer.Plugins.IPluginRandomEntityインターフェイスで定義されているのは、以下のとおり
- UInt32 GetRand()
- 乱数を返す(UInt32の範囲)
- UInt32 GetRand(UInt32 LimitMax)
- 乱数を返す(0~LimitMax)
- String ArgorithmName()
- 乱数アルゴリズム名を返す
jp.dip.rocketeer.Plugins.IPluginBaseインターフェイスで定義されている分については、インターフェイス IPluginBase についてを参照