TsgcWebSocketClient › Metodi › WriteAndWaitData
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.
function WriteAndWaitData(const aText: String; const aTimeout: Integer = 10000): string;
| Nome | Tipo | Descrizione |
|---|---|---|
aText | const String | Il payload testuale da inviare al server come frame di testo WebSocket. |
aTimeout | const Integer | Tempo massimo in millisecondi di attesa della risposta del server. Il valore predefinito è 10000 (10 secondi). |
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)
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.
vReply := oClient.WriteAndWaitData('ping', 5000);
if vReply <> '' then
ShowMessage(vReply);
function WriteAndWaitData(const aStream: TStream; const aSize: Integer = 0; const aStreaming: TwsStreaming = stmNone; const aTimeout: Integer = 10000) : TStream;
| Nome | Tipo | Descrizione |
|---|---|---|
aStream | const TStream | Stream sorgente il cui contenuto verrà inviato come frame binario WebSocket. Il chiamante rimane il proprietario dello stream. |
aSize | const Integer | Dimensione 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. |
aStreaming | const TwsStreaming | Modalità di streaming per la trasmissione frammentata (stmNone, stmStart, stmContinue, stmFinish). Il valore predefinito è stmNone, che invia un messaggio completo autonomo. |
aTimeout | const Integer | Tempo massimo in millisecondi di attesa della risposta del server. Il valore predefinito è 10000 (10 secondi). |
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)
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.
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;