"API Version 0.2.2" LastUpdate : 03/02/23

1.モジュール間通信

モジュールの構成

Regnessem は、システムモジュール、UIモジール、プロトコルモジュール、アドインモジュールの4種類のモジュールによって構成されます。Regnessem を起動するためにはシステムモジュールの他に、1つのUIモジュールと1つ以上のプロトコルモジュールが必要です。プロトコルモジュールとアドインモジュールは複数のモジュールをロードすることができます。

システムモジュール モジュール間通信の実現、基本的なサービスの提供を行います。
UIモジュール ユーザインターフェイスを提供します。
プロトコルモジュール 各種IMサービスをラッピングし、機能の提供を行います。
アドインモジュール その他の機能を追加しましゅ。

モジュール名

Regnessem を構成する各モジュールはモジュールの種類を表すユニークなモジュール名を持ちます。モジュール名は GetPluginInfo(InfoNo=1) で得ることができます。Plugins フォルダ内に同じモジュール名のモジュールが複数ある場合、2つ目以降はロードされません。モジュールの種類とモジュール名の対応関係は次の通りでです。

システムモジュール "System"
UIモジュール "UI"
プロトコルモジュール "Protocol/***" (***は任意のプロトコル名)
アドインモジュール "AddIn/***" (***は任意のアドイン名)

サービスとイベント

モジュール間の通信はサービスとイベントによって実現されます。サービスとイベントは、システムモジュールが提供する以下のようなコールバック関数群によって実現されます。各コールバック関数へのポインタは Initialize 関数の引数として渡される、TNsmPluginInitInfo 構造体に含まれます。

CreateService サービスを登録します。
GetService サービス名からサービスのハンドルを得ます。
CallService サービスを呼び出します。
CreateEvent イベントを登録します。
GetEvent イベント名からイベントのハンドルを得ます。
NotifyEvent イベントを通知します。
HookEvent イベントフックを登録します。
UnhookEvent イベントフックを解除します。

サービス

各モジュールが提供する機能をサービスと呼びます。モジュールの種類によって、最低限提供すべきサービスが定義されています。モジュールは CreateService 関数を用いて、システムモジュールのサービスリストにサービスを登録します。サービスはサービス名と呼ばれるユニークな文字列によって識別され、任意の関数へのポインタと関連づけられて登録されます。サービスは CallService 関数によって、どのモジュールからでも呼び出すことができます。

サービス名の例:
"System/Connection/Members/GetInfo"
"Protocol/msn/Connect"
"UI/MainWindow/Open"

イベント

イベントは何らかのイベントが発生したことを、システム全体に通知することができる仕組みです。 CreateEvent 関数を用いて、システムモジュールのイベントリストに新しいイベントを登録します。イベントはユニークな文字列であるイベント名によって識別されます。イベントの通知を受けるためには HookEvent 関数を用いて予めイベントハンドラ関数を登録して必要があります。

イベント名の例:
"System/Connection/OnConnect"
"System/Session/OnReceiveMessage"