ID session

L'architecture HACL n'est pas limitée à 52 sessions. Par conséquent, un identifiant de session à un seul caractère tel que celui utilisé dans EHLLAPI n'est pas approprié. La HACL utilise le concept de descripteur de connexion, qui est une simple valeur de 32 bits qui n'a aucune signification particulière pour l'application. Un descripteur de connexion identifie de manière unique une connexion (session) spécifique. Vous pouvez utiliser un descripteur de connexion entre les unités d'exécution et les processus pour faire référence à la même connexion.

Tous les objets et méthodes HACL qui doivent faire référence à une connexion particulière acceptent un descripteur de connexion. De plus, pour des raisons de compatibilité descendante et pour permettre une référence depuis l'interface utilisateur de l'émulateur (qui n'affiche pas le descripteur), certains objets et méthodes acceptent également l'ID de session traditionnel. L'application peut obtenir un descripteur de connexion en énumérant les connexions avec l'objet ECLConnList. Chaque connexion est représentée par un objet ECLConnection. La méthode ECLConnection::GetHandle peut être utilisée pour récupérer le descripteur associé à cette connexion spécifique.

Il est fortement recommandé que les applications utilisent des descripteurs de connexion au lieu de noms de connexion (ID de session court EHLLAPI). Les futures implémentations de HACL pourraient empêcher les applications qui utilisent des noms de connexion d'accéder à plus de 52 sessions. Dans certains cas, il peut être nécessaire d'utiliser le nom, par exemple lorsque l'utilisateur doit saisir le nom d'une session spécifique que l'application doit utiliser. Dans l'exemple C++ suivant, vous fournissez le nom d'une session. L'application recherche ensuite la connexion dans la liste des connexions et crée des objets PS et OIA pour cette session :
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. Alors... 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); }

La deuxième façon de créer les objets PS et OIA présentés dans l'exemple n'est pas préférable, car elle utilise le nom de session au lieu du descripteur. Cela crée une limite implicite de 52 sessions dans cette section du code. L'utilisation du premier exemple présenté permet à cette section de code de fonctionner pour n'importe quel nombre de sessions.