セッション 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 の例を使用すると、そのコード・セクションを さまざまなセッションに使用することができます。