0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ランダムプラグインの実装方法

Posted at

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 についてを参照


目次へ戻る

目次というか最初の一歩

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?