Lade...
 

CX_WEB_SERVICE_MANAGER::RequestMorphITBinding

CX_WEB_SERVICE_MANAGER::RequestMorphITBinding

4.1.0
204939

Beschreibung:

Diese Methode meldet beim Server den Start einer dedizierten ClassiX-Instanz an. Wenn die ClassiX-Instanz mit einem MorphIT-Server verbunden ist, dann schickt die ClassiX-Instanz dem Server eine Nachricht, die dort einen MorphIT-Endpunkt und einen Launch-Nonce generiert. Der MorphIT-Endpunkt ist eine Websocket-ID, die genau wie beim Login im statischen Modus verwendet wird, um den MorphIT-Client zu identifizieren. Der Server schickt der ClassiX-Instanz beide Infromationen zurück. RequestMorphITBinding setzt den erhaltenen Nonce-Wert direkt in die Umgebungsvariable CX_MORPHIT_NONCE und liefert die Websocket-ID als Ergebnis zurück.

Die Methode liefert eine Fehlermeldung, wenn das ClassiX nicht mit einem MorphIT-Server verbunden ist, oder dieser nicht antwortet.

Die Aktion kann auch über den äquivalenten Serverbefehl request_binding ausgelöst werden. Hierbei wird jedoch die Umgebungsvariable CX_MORPHIT_NONCEnicht gesetzt.

205954, 4.1.4
RequestMorphITBinding akzeptiert nun zusätzlich ein optionales CX_JSON_OBJECT als Parameter. Dieses JSON-Objekt wird an den Server übermittelt und kann das Verhalten des Bindings steuern. Die möglichen Felder des JSON-Objekts können der Dokumentation des entsprechenden Serverbefehls request_binding entnommen werden (alle Felder bis auf das command-Feld).

 

Dediziertes ClassiX starten:

Nach dem Aufruf von RequestMorphITBinding steht ein neuer, gültiger Nonce-Wert in der Umgebungsvariable CX_MORPHIT_NONCE, sodass per System, System2, RunSystemShell oder Start ein neuer ClassiX-Prozess gestartet werden kann, der sich mit dem MorphIT-Server verbinden kann und von dem Server nicht zurückgewiesen wird. Alternativ kann die ClassiX-Instanz über einen verbundenen MorphIT-Launcher über LaunchDedicatedClassiX auch auf einer anderen Maschine gestartet werden. 

Die mit diesem Nonce-Wert gestartete ClassiX-Instanz wird in einem speziellen Verbindungspool im Server gehalten und kein regulärer MorphIT-Client kann sich mit dieser Instanz verbinden. Die Instanz wird im Server-Log direkt als belegte Instanz eingetragen und in der Admin-Konsole als dedizierte ClassiX-Instanz markiert.

Nur der MorphIT-Client, der sich mit der korrekten Websocket-ID mit dem Server verbindet, wird mit dieser ClassiX-Instanz verbunden.

Sollte sich der dazugehörige MorphIT-Client nicht innerhalb einer Zeitspanne (konfigurierbar über ws.launcher.launch_timeout) mit dem Server verbinden, dann wird die dedizierte ClassiX-Instanz vom Server wieder beendet.

 

MorphIT-Client benachrichtigen:

Damit damit sich ein MorphIT-Client mit der gestarteten ClassiX-Instanz verbinden kann, muss dem Client die Websocket-ID mitgeteilt werden.

Falls die startende ClassiX-Instanz mit einem MorphIT-Client verbunden ist, dann benachrichtigt der Server den verbundenen MorphIT-Client unmittelbar nachdem Nonce-Wert und die Websocket-ID angelegt wurden und der MorphIT-Client zeigt dem Benutzer einen Dialog, der ihn bestätigen lässt, dass sich MorphIT in einem neuen Tab öffnen und auf die neue ClassiX-Instanz verbinden wird.

Falls die startende ClassiX-Instanz nicht mit einem MorphIT-Client verbunden ist, weil es die Webservice-Instanz aus dem statischen Modus ist und als Antwort auf eine Webservice-Anfrage den Client mit einem dynamisch zu startenden ClassiX verbinden soll, dann muss das ClassiX mit dem Antworttyp dynamic antworten. Hierbei muss das Feld endpoint von der ClassiX-Instanz auf die von dieser Methode zurückgegebene Websocket-ID gesetzt werden, da der Server eine neue ID generieren würde, die nicht an das gestartete ClassiX gekoppelt wäre. Sobald der Client diese Antwort erhält, verbindet er sich an diesen Socket und wird vom Server mit der gestarteten ClassiX-Instanz verbunden.

 

Code-Beispiel:

Mit verbundenem MorphIT-Client und lokalem Start und einem eigenen Text, der in der Warteschlange angezeigt wird.

Var(options) CreateTransObject(CX_JSON_OBJECT) -> options "Please wait while a new process is being launched for you" options Put(queue_message) options GetManager(WEB_SERVICE) Call(RequestMorphITBinding) Drop cxpPath [] SystemObject Call(Start)
 
Ablaufdiagramm zum lokalen Start der ClassiX-Instanz mit verbundenem MorphIT
Ablaufdiagramm zum lokalen Start der ClassiX-Instanz mit verbundenem MorphIT
Code-Beispiel:

Als Webservice-Instanz im statischen MorphIT mit Start über den Launcher.

LAUNCH_INSTANCE_POST: { LocalVar(endpoint, response) NULL GetManager(WEB_SERVICE) CallWeak(RequestMorphITBinding) -> endpoint endpoint ifnot { //TODO pass error back to the user } launcherHostName "CX_MORPHIT_NONCE" SystemObject Call(GetEnvironment) startCommand NULL GetManager(WEB_SERVICE) CallWeak(LaunchDedicatedClassiX) ifnot { //TODO pass error message back to the user } CreateTansObject(CX_JSON_OBJECT) -> response "dynamic" response Put(type) endpoint response Put(endpoint) response ReturnStack }

 

Ablaufdiagramm zum Start der ClassiX-Instanz durch eine Webservice-Instanz über den Launcher
Ablaufdiagramm zum Start der ClassiX-Instanz durch eine Webservice-Instanz über den Launcher

 

 

Stack
Stack Position Objekttyp Kurzbeschreibung
Stack(In) Top CX_WEB_SERIVCE_MANAGER Der Webservice-Manager
  Top-1 CX_JSON_OBJECT | NULL Optionales Parameterobjekt
Stack(Out) Top STRING Die MorphIT-Endpoint-Id
Funktionsaufruf: Call(RequestMorphITBinding)