TsgcWebSocketClient › Metodi › WriteAndWaitData

WriteAndWaitData Metodo

Invia un messaggio di testo e blocca il chiamante fino a quando il server non risponde con un messaggio di testo o il timeout scade.

Overload

Overload 1

Sintassi

function WriteAndWaitData(const aText: String; const aTimeout: Integer = 10000): string;

Parametri

NomeTipoDescrizione
aTextconst StringIl payload testuale da inviare al server come frame di testo WebSocket.
aTimeoutconst IntegerTempo massimo in millisecondi di attesa della risposta del server. Il valore predefinito è 10000 (10 secondi).

Valore restituito

Il messaggio di testo ricevuto dal server, o una stringa vuota quando il timeout è scaduto, nessuna connessione era disponibile o si è verificato un errore. (string)

Note

WriteAndWaitData è un metodo di supporto pratico per gli scambi di tipo richiesta/risposta tramite WebSocket. Invia il frame di testo e poi blocca il thread chiamante su un evento interno finché non arriva il messaggio di testo successivo dal server o finché non scade il timeout. Poiché blocca il thread, non dovrebbe essere chiamato dal thread principale dell'interfaccia utente a meno che non si utilizzi un timeout breve. Viene restituita una stringa vuota quando il server non risponde in tempo; le eccezioni a livello di socket vengono intercettate e inoltrate a OnError. Utilizzare l'overload con stream quando è necessario inviare e ricevere payload binari.

Quando il client non è connesso, o il suo handshake WebSocket non è ancora terminato, WriteAndWaitData non invia nulla e restituisce immediatamente una stringa vuota invece di attendere il timeout. L'errore viene segnalato tramite OnError con Connection = nil e l'errore Data not sent, the client is not connected or its handshake has not completed. (resourcestring S_ERROR_CLIENT_NOT_CONNECTED). L'evento viene generato sul thread chiamante prima che il metodo restituisca il controllo, e LastError contiene lo stesso testo. Nessuna eccezione viene sollevata verso il chiamante e il client non viene disconnesso. Impostare Options.RaiseDisconnectExceptions su False per ignorare questa segnalazione. Quando un invio fallisce perché la sua connessione è andata persa e il client si è già riconnesso, l'errore viene segnalato comunque con Connection = nil, in modo che la nuova connessione resti aperta.

Esempio


vReply := oClient.WriteAndWaitData('ping', 5000);
if vReply <> '' then
  ShowMessage(vReply);

Sovraccarico 2

Sintassi

function WriteAndWaitData(const aStream: TStream; const aSize: Integer = 0; const aStreaming: TwsStreaming = stmNone; const aTimeout: Integer = 10000) : TStream;

Parametri

NomeTipoDescrizione
aStreamconst TStreamStream sorgente il cui contenuto verrà inviato come frame binario WebSocket. Il chiamante rimane il proprietario dello stream.
aSizeconst IntegerDimensione facoltativa del frammento in byte; quando è maggiore di zero, lo stream in uscita viene suddiviso in più frammenti di questa dimensione. Utilizzare 0 (valore predefinito) per inviare l'intero stream come un singolo frame.
aStreamingconst TwsStreamingModalità di streaming per la trasmissione frammentata (stmNone, stmStart, stmContinue, stmFinish). Il valore predefinito è stmNone, che invia un messaggio completo autonomo.
aTimeoutconst IntegerTempo massimo in millisecondi di attesa della risposta del server. Il valore predefinito è 10000 (10 secondi).

Valore restituito

Uno stream appena allocato contenente il messaggio binario ricevuto dal server, oppure nil quando il timeout è scaduto, non era disponibile alcuna connessione, o si è verificato un errore. Il chiamante è responsabile della liberazione dello stream restituito. (TStream)

Note

Questo overload è la controparte binaria del testo dell'altro overload. Scrive lo stream fornito come frame binario e poi blocca il thread chiamante su un evento interno fino a quando non arriva il successivo messaggio binario dal server o scade il timeout. Poiché blocca, evitare di chiamarlo dal thread principale dell'interfaccia utente con un timeout lungo. Il valore restituito è nil quando il server non risponde in tempo; le eccezioni vengono intercettate e inoltrate a OnError. Quando il client non è connesso, o il suo handshake non è ancora terminato, il metodo restituisce nil immediatamente senza attendere il timeout e segnala l'errore tramite OnError con Connection = nil, come descritto per l'altro overload. Liberare sia lo stream sorgente (dopo la chiamata) sia lo stream restituito quando si è terminato di utilizzarli.

Esempio


oRequest := TMemoryStream.Create;
try
  oRequest.LoadFromFile('request.bin');
  oReply := oClient.WriteAndWaitData(oRequest, 0, stmNone, 5000);
  try
    if Assigned(oReply) then
      oReply.SaveToFile('reply.bin');
  finally
    oReply.Free;
  end;
finally
  oRequest.Free;
end;

Torna ai Metodi