セッション ID
HACL 体系は、52 個のセッションに限定されていません。したがって、EHLLAPI で使われるような単一の文字セッション ID は適していません。HACL では、アプリケーションに対して 特定の意味をもたない単純な 32 ビット値である接続ハンドルの概念を使用しています。接続ハンドルは、個々の接続 (セッション) を固有に識別します。1 つの接続ハンドルを使用して、複数のスレッドおよびプロセスにおいて 同一の接続を参照することができます。
特定の接続を参照する必要のあるすべての HACL オブジェクトおよび メソッドは、接続ハンドルを受け入れます。さらに、後方互換性のためと、エミュレーター・ユーザー・インターフェース (ハンドルを表示しません) から 参照できるようにするため、一部のオブジェクトとメソッドは 従来のセッション ID も受け入れます。アプリケーションは、ECLConnList オブジェクトとの接続を列挙することによって 接続ハンドルを取得できます。それぞれの接続は、ECLConnection オブジェクトによって 表されます。ECLConnection::GetHandle メソッドを使用すると、個々の接続に関連した ハンドルを取り出すことができます。
アプリケーションで、接続名 (EHLLAPI 短縮セッション ID) の代わりに 接続ハンドルを使用することを強くお勧めします。HACL の将来の設定では、接続名を使用するアプリケーションは、52 個を超えるセッションにアクセスできなくなる場合があります。場合によっては、名前を使用する必要があるかもしれません。例えば、アプリケーションが利用する 特定のセッションの名前を入力する必要があるときなどです。以下の C++ の例では、セッション名を入力します。するとアプリケーションは、接続リスト内でその接続を検出してから、そのセッション用の PS および OIA オブジェクトを作成します。
ECLConnList ConnList; // Connection list
ECLConnection *ConnFound; // Ptr to found connection
ECLPS *PS; // Ptr to PS object
ECLOIA *OIA; // Ptr to OIA object
char UserRequestedID;
//... user inputs a session name (A-Z or a-z) and it is put
//... into the UserRequesteID variable. Then...
ConnList.Refresh(); // Update list of connections
ConnFound = ConnList.FindConnection(UserRequestedID);
if (ConnFound == NULL) {
// Session name given by user does not exist...
}
else {
// Create PS and OIA objects using handle of the
// connection just found:
PS = new ECLPS(ConnFound.GetHandle());
OIA= new ECLOIA(ConnFound.GetHandle());
// The following would also work, but is not the
// preferred method:
PS = new ECLPS(UserRequestedID);
OIA= new ECLOIA(UserRequestedID);
}
例に示された、PS および OIA オブジェクトを作成する第 2 の方法は 望ましくありません。ハンドルではなくセッション名を使用するからです。この場合、このコード・セクションに暗黙の 52 個のセッション制限が設定されます。上記の第 1 の例を使用すると、そのコード・セクションを さまざまなセッションに使用することができます。