TsgcWebSocketClientMetodi › 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 client non è connesso o 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.

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 client non è connesso o il server non risponde in tempo; le eccezioni vengono intercettate e inoltrate a OnError. 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