基本仕様 CentralMain について 前の章 次の章

VB C# ALL プログラミング言語によるフィルタ (ここで選んだ言語で選別された説明や図だけが表示されます)

付録. CentralMain について

MANDALA.net には、ツーピーススタイルのアプリケーションのセントラル側に CentralMain というモジュールが添付されています。 ツーピーススタイルのアプリケーションで、この CentralMain でホストするか、または IIS でホストします。

CentralMain はコンソールアプリケーションであり、キーボードからコマンドを入力することによってセントラルピースの制御を行うことができます。

1. コマンド一覧

MANDALA.net 付属の CentralMain で使用可能なコマンドは次の通りです。

AUTOKILL
EXIT
HELP
KILL
LIST
MAX
REJECT
TIMER

以下、これらのコマンドについて個別に説明します。

◇ AUTOKILL コマンド

書式

AUTOKILL ON

AUTOKILL OFF

機能

生存監視タイマによるセッションの自動終了をオン・オフします。

AUTOKILL がオンに設定されていると、生存監視タイマによって続行不可能と判定されたセッションが自動的に強制終了されます。

デフォルトでは AUTOKILL はオンに設定されています。

パラメタ

ON 自動終了をオン (有効な状態) にします。

OFF 自動終了をオフ (無効な状態) にします。

パラメタ無しの場合、現在の自動終了の状態を表示します。

◇ EXIT コマンド

書式

EXIT

機能

CentralMain プロセスを終了します。

このコマンドが成功すると セントラル側のサーバは終了し、.NET リモート処理の待ち受けポートは閉じられます。すべてが終了すると、コマンドプロンプトウィンドウも閉じられます。

アクティブなセッションが存在する場合、EXIT コマンドは実行されません。アクティブなセッションをすべて終了させてから EXIT コマンドを入力する必要があります。アクティブなセッションを終了させるためには、クライアントコンピュータからローカルピースを終了させるか、KILL コマンドを使用して強制終了します。

パラメタ

(パラメタはありません)

◇ HELP コマンド

書式

HELP

機能

コンソールウィンドウにコマンド一覧を表示します。

パラメタ

(パラメタはありません)

◇ KILL コマンド

書式

KILL

KILL セッション ID

KILL ALL

機能

セッションを強制終了します。

このコマンドは、クライアント側のローカルピースが単独で異常終了してしまった場合など、正常終了させることができなくなってしまった場合の非常用として使用してください。通常は、ローカルピースを終了させることによってセントラルピースのセッションも消滅しますのでそのように運用してください。

パラメタ

セッション ID を数値で指定します。または、"ALL" と文字列で指定します。ALL の場合、すべてのセッションを強制終了しようとします。

アクティブでないセッションの ID や存在しない ID (最大値を超える数や負の数など) を入力した場合、あるいは数値として認識できない文字列を入力した場合はエラーとなりコマンドは実行されません。

アクティブセッション ID 最大値 (ActiveMax) がゼロの場合のみ、パラメタ無しで KILL コマンドを投入することができます。この場合、対象となるセッションは必ず 1 つに絞られるので、ID を指定しなくとも対象が限定されるためです。もちろん "KILL 0" と ID を指定しても構いません。

◇ LIST コマンド

書式

LIST

LIST セッション ID

機能

アクティブなセッションをコマンドプロンプトウィンドウに表示します。たとえば次のように表示されます。

 SID フォーム名         ユーザ名           クライアント情報
*  1 売上伝票入力       COM1\USER1         営業部
-  2 得意先マスタ保守   COM1\USER2         総務部
最も左側に表示されている記号には、次のような意味があります。
* (アスタリスク) クライアントが正常に稼働していることを表します。
- (ハイフン) クライアントからの送信が途絶えていることを表します。
+ (プラス) クライアントの生存確認管理をしていないことを表します。この場合、すべてのセッションにこの記号が表示されます。

SID という見出しの列は、セッション ID を表示しています。

Form Name という見出しの列は、画面略称を表示しています。

User Name という見出しの列は、認証時に入力されたユーザ名を表示しています。セキュリティ機能を使用していない場合、この欄には何も表示されません。

Client Info という見出しの列は、各サイトで規定されたクライアント情報 (FormBase オブジェクトのプロパティ ClientInfo に格納されている文字列) が表示されます。このフィールドは、アプリケーションで自由に設定することができます。

パラメタ

表示したいセッションの ID を指定します。省略した場合、すべてのセッションを表示します。

アクティブでないセッションの ID や存在しない ID (最大値を超える数や負の数など) を入力した場合、あるいは数値として認識できない文字列を入力した場合はエラーとなりコマンドは実行されません。

◇ MAX コマンド

書式

MAX セッション ID 最大値

機能

セッション ID の最大値を設定します。

セッション ID は 0 から始まる連番になっており、セッション生成時 (≒アプリケーション起動時) にセッションごとに振られます。 最大値を超える ID のセッションを生成することはできませんので、このコマンドで最大同時セッション数を設定することになります(実際には最大同時セッション数 + 1 ですが)。

このコマンドでは、最大値を減ずるように指定することはできません。

パラメタ

セッション ID の最大値を指定します。
以前の最大値より小さい値を入力した場合や制限値を超える値を入力した場合、および数値として認識できない文字列を入力した場合、エラーとなりコマンドは実行されません。

パラメタ無しの場合、現在の最大値を表示します。

◇ REJECT コマンド

書式

REJECT ON

REJECT OFF

REJECT

機能

アプリケーションの新規起動を禁止する機能を管理します。新規起動が禁止された状態 (リジェクトモード) では、ローカルピース・アプリケーションを実行しようとしてもセントラルからエラーが返されて実行することができません。

パラメタ

ON を指定すると、新規起動禁止状態 (リジェクトモード) になります。

OFF を指定すると、新規起動禁止状態を解除します。

パラメタ無しの場合、現在の新規起動禁止状態を表示します。

◇ TIMER コマンド

書式

TIMER

機能

生存監視タイマの監視間隔を表示します。

このコマンドで表示された間隔で、ローカルからセントラルへの定時通信が行われています。ただし、表示される時間が 0 分の場合、定時通信は行われず生存監視タイマは機能していないことになります。

サーバではこの間隔プラス 5 分の周期で定時通信の状態を検査し、過去「監視間隔 + 5 分」の間に通信が無ければローカルピースが生存していないと判断します。

パラメタ

(パラメタはありません)

2. CentralMain のカスタマイズ方法

CentralMain はのソースコードはお客様が自由に解析・改変してよいことになっておりますので、これをもとにアプリケーションユーザの要求仕様に応じたソフトウェアを開発していただくことが可能です。

このような目的のために、CentralMain の各コマンド実装について若干の説明を記述します。

CentralMain では、セントラルピース管理機能の要として Communicator (AppliTech.Remoting 名前空間) というクラスのオブジェクトを使用しています。この項では、この Communicator の使用方法についての説明を中心に記述を進めていきます。

◇ KILL コマンド

Communicator.DisposeInstance(sessionId)

パラメタ sessionId (整数型 (Integer, int)) で指定した ID のセッションを終了させます。ID を指定した KILL コマンドで使用しています。

Communicator.DisposeAllInstances()

アクティブなすべてのセッションを終了させます。ALL を指定した KILL コマンドで使用しています。

◇ LIST コマンド

Communicator.GetAllSessionId()

戻り値は、整数型 (Integer, int) の 1 次元配列。

アクティブなすべてのセッション ID を配列にして取得します。引数なしの LIST コマンドで、セッション一覧を得るために使用しています。

Communicator.GetFormBaseClassName(sessionId)

戻り値は、文字列型 (String, string)。セッション一覧の画面略称を表示するために使用しています。

パラメタ sessionId (整数型 (Integer, int)) で指定した ID のセッションから個別 FormBase のクラス名を取得します。 個別 FormBase クラス名は「画面略称 + FormBase」となっているため、ここから画面略称を導出することができます。

Communicator.GetFormUserName(sessionId)

戻り値は、文字列型 (String, string)。セッション一覧のユーザ名を表示するために使用しています。

パラメタ sessionId (整数型 (Integer, int)) で指定した ID のセッションから認証時に使用されたユーザ名を取得します。 セキュリティ機能を使用していない場合、長さ 0 の文字列が返されます。

Communicator.GetFormBaseExtension(sessionId)

戻り値は、文字列型 (String, string)。セッション一覧の Extension フィールドを表示するために使用しています。

パラメタ sessionId (整数型 (Integer, int)) で指定した ID のセッションから FormBase の Extension フィールドを取得します。Extension フィールドはアプリケーションごとに自由に設定できるオブジェクト型 (Object, object) のフィールドで、実際のところ文字列である必要はありません。

このメソッドは、Extension フィールドが System.String 型であれば System.String 型にキャストした結果を返します。 これ以外の場合、格納されているオブジェクトの ToString() メソッドの結果を返します。Extension フィールドに何も設定されていない場合、長さ 0 の文字列を返します。

◇ MAX コマンド

Communicator.SetActivemax(activeMax)

パラメタ activeMax (整数型 (Integer, int)) でセッション ID の最大値を設定します。

◇ REJECT コマンド

Communicator.IsRejectMode()

戻り値は、真偽値型 (Boolean, bool)。

現在の Communicator の新規起動禁止状態 (リジェクトモード) を取得します。戻り値が True であれば新規起動禁止状態であり、False であれば 新規起動禁止状態ではありません。

Communicator.SetRejectMode(mode)

Communicator の新規起動禁止状態を、パラメタ mode (真偽値型 (Boolean, bool)) で指定した状態にします。 パラメタに True を指定すると新規起動状態になり、False を指定すると新規起動禁止状態を解除します。

3. 管理イベントのハンドリング

Communicator は、アプリケーションの管理に関するイベントを特定のオブジェクトに通知する仕組みを持っています。 CentralMain ではこの機構を利用してアプリケーションの開始や終了、例外発生などの通知を受け取り、逐次メッセージを表示しています。

Communicator から管理イベントの通知を受け取ることができるのは、ICommHandler (AppliTech.Remoting 名前空間) インタフェースを実装したオブジェクトです。 CentralMain は自身がこのインタフェースを実装することで、自分で Communicator からの通知を受け取っています。

(VB の場合)
Public Class CentralMain : Inherits ICommHandler
(C# の場合)
public class CentralMain : ICommHandler

イベントを受け取るためには、ICommHandler を実装したクラスのインスタンスを Communicator オブジェクトに登録します。

(VB の場合)comm.AddCallBackHandler(Me)
(C# の場合)comm.AddCallBackHandler(this);

ICommHandler の実装必須メソッドは次の通りです。

AssemblyLoaded
AssemblyUnloaded
FormBaseCreated
FormBaseDestroyed
ExceptionOccured

これらのメソッドは、Communicator から呼び出される形で実行されます。

それぞれのメソッドについて説明します。

◇ AssemblyLoaded

パラメタ

(1) 文字列型 (String, string)。アセンブリ名が格納されています。

呼び出される時期

アプリケーションが起動され、セントラルピースのアセンブリがロードされたときに呼び出されます。

◇ AssemblyUnloaded

パラメタ

(1) 文字列型 (String, string)。アセンブリ名が格納されています。

呼び出される時期

アプリケーションが終了し、セントラルピースのアセンブリがアンロードされたときに呼び出されます。

◇ FormBaseCreated

パラメタ

(1) 整数型 (Integer, int)。セッション ID が格納されています。

呼び出される時期

アプリケーションが起動され、セントラルピースの FormBase が生成されたときに呼び出されます。

◇ FormBaseDestroyed

パラメタ

(1) 整数型 (Integer, int)。セッション ID が格納されています。

(2) 文字列型 (String, string)。FormBase の完全修飾クラス名が格納されています。

呼び出される時期

アプリケーションが終了し、セントラルピースの FormBase が破棄されるときに呼び出されます。 パラメタとして FormBase クラス名が渡されるのは、これ以降このセッション ID に対して GetFormBaseClassName メソッドを呼び出してもクラス名が得られなくなることへの補償です。

◇ ExceptionOccured

パラメタ

(1) 整数型 (Integer, int)。セッション ID が格納されています。

呼び出される時期

アプリケーションのセントラルピースで未処置の例外が発生したときに呼び出されます。

◇ 共通の注意点

パラメタとしてセッション ID を受け取ることのできるメソッドがありますが、イベントの内容によってはセッション ID が確定できない場合もあります。このような場合セッション ID には負の値が格納されます。

ここで説明した各種メソッドは、ICommHandler インタフェースを実装した任意のクラスの中から呼び出すことができますが、リモートオブジェクトを通じてのコールバックはサポートされていません。つまり、通常のローカルピース・アプリケーションのように Communicator をリモートオブジェクトとして使用し、かつ管理イベントを受け取るような使い方はできません。