Regnessemは,システムモジュールと呼ばれる本体(nsmsgs.exe)に,UIモジュールとその他必要なモジュールを組み合わせて動作します.システムモジュール以外の全てのモジュールはここでいう"プラグイン"として実現されています.表2.1.1[モジュールの種類と機能]にモジュールの種類と機能を,図2.1.1[Regnessemの構成]にRegnessemの構成例を示します.
Regnessemを起動するためには,システムモジュールはもちろんですが,少なくとも1つのUIモジュールが必要です.プロトコルモジュールとアドインモジュールについては,複数の異なるモジュールを同時に利用することが可能です.
モジュールの種類 | 機能 |
---|---|
システムモジュール | 基本的なサービスの提供と,イベントの通知を行います. |
UIモジュール | ユーザインターフェイスを提供します. |
プロトコルモジュール | IMを始め,様々な外部サービスとのインターフェイスを提供します. |
アドインモジュール | その他任意の機能を提供します. |
モジュールの種類はモジュール名によって識別されます.それ故,モジュールの作者は,作成したモジュールにどのようなモジュール名をつけるかに気を配らなくてはなりません.
システムモジュールは,モジュールが備えるGetPluginInfo関数を使ってモジュール名を確認します.同一のモジュール名を持つ複数のモジュールがあった場合,最初に発見されたモジュールのみが利用され,そのほかのモジュールは利用されません.
表2.2.1[モジュールの種類とモジュール名]にモジュールの種類とモジュール名の規約を示します.
モジュールの種類 | モジュール名 |
---|---|
システムモジュール | "System" |
UIモジュール | "UI" |
プロトコルモジュール | "Protocol/***"(***の部分は任意) |
アドインモジュール | "AddIn/***"(***の部分は任意) |
各モジュールはサービスとイベントを用いて通信します.サービスは各モジュールの機能を他のモジュールに提供するもので,イベントはモジュール内で発生した事象を他のモジュールに通知するものです.各モジュールは,イベントに対応した処理を登録することで,他のモジュールの動作に応じて動作することが可能になります.
全てのサービスとイベントはそれぞれ固有の名前によって管理されます.それぞれのモジュールが提供するサービスとイベントの名前が同じにならないように,サービス名とイベント名にはモジュール名を冠します.表2.4.1[サービス名とイベント名の例]にモジュールとサービス名の例を示します.
モジュール | サービス名の例 |
---|---|
システムモジュール | "System/GetPluginInfo","System/Connection/Create" |
UIモジュール | "UI/Notify","UI/MessageBox" |
モジュール間通信はシステムモジュールが媒介することで実現されています.すなわち,サービスとイベント処理はシステムモジュールに登録され,他のモジュールの提供するサービスの実行や,他のモジュールへのイベント通知はシステムモジュールに依頼します.このために表2.5.1[システムモジュールの提供する関数]に示す関数がシステムモジュールから提供されています.これらのシステム関数を用いたサービスとイベントの処理タイミングをそれぞれ図2.5.1[サービスの処理]と図2.5.2[イベント周りの処理]に示します.
システム関数 | 機能 |
---|---|
CreateService | サービスを登録します |
GetService | サービス名からサービスのハンドルを得ます |
CallService | サービスを呼び出します |
CreateEvent | イベントを登録します |
GetEvent | イベント名からイベントのハンドルを得ます |
NotifyEvent | イベントを通知します |
HookEvent | イベント処理を登録します |
UnhookEvent | イベント処理の登録を解除します |