RestConnectAsync

value RestConnectAsync ( BYREF value rest, string strHostname, value Port = 80, value bUseTLS = FALSE, value bAutoReconnect = FALSE,  value IdleTimeoutInMsec = 30000);

Rückgabewert

Rückgabewert

Beschreibung

TASK-Objekt

Ein neues TASK-Objekt, das mit dem REST-Objekt rest verbunden ist.

FALSE / false / 0

Das Erstellen des TASK-Objekts ist fehlgeschlagen. Das REST-Objekt rest kann genutzt werden, um mit RestGetConnectFailReason die Ursache festzustellen.

Parameter

rest

Die Zielvariable für das erzeugte REST-Objekt.

strHostname

Die Hostname des REST-Servers.

Port

Der Port des REST-Servers, der für die Verbindung genutzt werden soll.

bUseTLS

Gibt an, ob für die Verbindung das SSL/TLS Protokoll verwendet werden soll.

bAutoReconnect

Gibt an, ob für eine Verbindung automatisch wiederhergestellt werden soll, falls diese getrennt wurde und Rest-Funktionen für dieses REST-Objekt aufgerufen werden, die eine aktive Verbindung zum REST-Server benötigen.

IdleTimeoutInMsec

Die maximale Wartezeit für zusätzliche eingehende Daten während dem Empfang bzw. die maximale Wartezeit für das Senden zusätzlicher Daten.

Bemerkungen

Baut asynchron eine Verbindung zu einem REST-Server auf. Der Hostname strHostname kann ein Domainname oder eine IP-Adresse sein. Es werden sowohl IPv4- als auch IPv6-Adressen unterstützt. Der Port ist normalerweise 80 oder 443. Wenn SSL/TLS erforderlich ist, muss bUseTLS auf TRUE gesetzt werden. Die Option bAutoReconnect gibt an, ob die Verbindung für nachfolgende REST-Anforderungen automatisch wiederhergestellt werden soll. Die Timeout-Zeit IdleTimeoutInMsec gibt die max. Wartezeit an, die während und nach dem Verbindungsaufbau gültig ist - sie kann nach erfolgreichem Verbindungsauf jederzeit mit RestSetIdleTimeout neu gesetzt werden. Soll die Verbindung zum REST-Server getrennt werden, muss das REST-Objekt rest mit RestDisconnect getrennt und geschlossen werden.

Der Verbindungsauf erfolgt asynchron in einem eigenen Task (Hintergrundprozess), sodass die Funktion nicht wartet bis eine Verbindung hergestellt wurde - die Funktion RestConnectAsync kehrt nach dem Aufruf sofort zurück. Die eigentliche Abfrage, ob die Verbindung zum REST-Server tatsächlich hergestellt werden konnte, kann nur über die Task-Funktionen erfolgen.

Diese Funktion ist für einfache Verbindungen vorgesehen, für die keine Proxys (HTTP oder SOCKS) bzw. SSH-Tunnel erforderlich sind.
Beim Beenden eines laufenden Projekts trennt und zerstört Victory automatisch alle nicht mit RestDisconnect getrennten REST-Objekte.

Beispiel

//////////////////////////////////////////////////////////////////////
//Globale Variablen
value rest = 0;
value task = 0;
value RestWorker = 0;
value REST_CONNECT_START = 0;
value REST_CONNECT_RUNNING = 10;
value REST_REQUEST_START = 20;
value REST_REQUEST_RUNNING = 30;
value REST_REQUEST_DONE = 40;
value REST_ERROR = -100;
value REST_STANDBY = -1;
string strLastError;
string strResponse;

//////////////////////////////////////////////////////////////////////
//_MainCycle
//
//////////////////////////////////////////////////////////////////////
switch (RestWorker)
    case REST_CONNECT_START:
        //ip.jsontest.com liefert als Antwort die IP-Adresse des anfragenden Clients
        task = RestConnectAsync(rest, "http://ip.jsontest.com");
        if (task == NULL)
            RestWorker = REST_ERROR;
            break;
        end    
        RestWorker = REST_CONNECT_RUNNING;
        break;
        
    case REST_CONNECT_RUNNING:
        if (TaskFinished(task))
            if(!TaskSuccessful(task))
                RestWorker = REST_ERROR;
                break;
            else
                RestWorker = REST_REQUEST_START;
            end
            TaskClose(task);
        end
        break;

    case REST_REQUEST_START:
        task = RestFullRequestAsync(rest, "GET", "/");
        if (task == NULL)
            RestWorker = REST_ERROR;
            break;
        end    
        RestWorker = REST_REQUEST_RUNNING;
        break;
        
    case REST_REQUEST_RUNNING:
        if (TaskFinished(task))
            if(!TaskSuccessful(task))
                RestWorker = REST_ERROR;
                break;
            else
                TaskGetResultString(task, strResponse);
                strResponse = JsonExpand(strResponse);
                //Inhalt von strResponse:
                //{
                //  "ip": "82.165.12.98"
                //}
                RestWorker = REST_REQUEST_DONE;
            end
        end
        break;
        
    case REST_REQUEST_DONE:
        RestDisconnect(rest);
        RestWorker = REST_STANDBY;
        break;
        
    case REST_ERROR:
        if (rest != NULL)
            if (task != NULL)
                strLastError = TaskGetLastError(task);
            else
                strLastError = RestGetLastError(rest);
            end
            RestDisconnect(rest);
        end
        RestWorker = REST_STANDBY;
        break;
end 

Die REST-Funktionen, Die TASK-Funktionen

Siehe auch  RestConnect, RestDisconnect, RestFullRequestAsync, RestGetLastError, TaskClose, TaskFinished, TaskSuccessful, TaskGetLastError, TaskGetResultString