TsgcWebSocketClient › Methods › WriteAndWaitData

WriteAndWaitData Methode

Verzendt een tekstbericht en blokkeert de aanroeper totdat de server antwoordt met een tekstbericht of de time-out verstrijkt.

Overloads

Overload 1

Syntaxis

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

Parameters

NaamTypeBeschrijving
aTextconst StringDe tekstpayload die als WebSocket-tekstframe naar de server wordt verzonden.
aTimeoutconst IntegerMaximale tijd in milliseconden om te wachten op het serverantwoord. Standaard 10000 (10 seconden).

Retourwaarde

Het tekstbericht ontvangen van de server, of een lege tekenreeks wanneer de time-out is verstreken, er geen verbinding beschikbaar was, of een fout is opgetreden. (string)

Opmerkingen

WriteAndWaitData is een hulpfunctie voor verzoek/antwoord-uitwisselingen via een WebSocket. Het verzendt het tekstframe en blokkeert vervolgens de aanroepende thread op een interne gebeurtenis totdat het volgende tekstbericht van de server arriveert of de time-out optreedt. Omdat het blokkeert, mag het niet worden aangeroepen vanuit de hoofd-UI-thread, tenzij een korte time-out wordt gebruikt. Een lege tekenreeks wordt geretourneerd wanneer de server niet op tijd antwoordt; uitzonderingen op het socketniveau worden opgevangen en doorgegeven aan OnError. Gebruik de stream-overload wanneer u binaire payloads moet verzenden en ontvangen.

Wanneer de client niet is verbonden, of de WebSocket-handshake nog niet is voltooid, verzendt WriteAndWaitData niets en retourneert onmiddellijk een lege tekenreeks in plaats van op de time-out te wachten. De fout wordt gemeld via OnError met Connection = nil en de foutmelding Data not sent, the client is not connected or its handshake has not completed. (resourcestring S_ERROR_CLIENT_NOT_CONNECTED). De gebeurtenis wordt geactiveerd op de aanroepende thread voordat de methode terugkeert, en LastError bevat dezelfde tekst. Er wordt geen uitzondering naar de aanroeper gegenereerd en de verbinding wordt niet verbroken. Stel Options.RaiseDisconnectExceptions in op False om deze melding over te slaan. Wanneer een schrijfbewerking mislukt omdat de verbinding verloren is gegaan en de client al opnieuw is verbonden, wordt de fout ook gemeld met Connection = nil, zodat de nieuwe verbinding open blijft.

Voorbeeld


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

Overload 2

Syntaxis

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

Parameters

NaamTypeBeschrijving
aStreamconst TStreamBronstream waarvan de inhoud zal worden verzonden als een WebSocket-binair frame. De aanroeper blijft de eigenaar van de stream.
aSizeconst IntegerOptionele fragmentgrootte in bytes; wanneer groter dan nul, wordt de uitgaande stream opgesplitst in meerdere fragmenten van deze grootte. Gebruik 0 (de standaard) om de volledige stream als één frame te verzenden.
aStreamingconst TwsStreamingStreamingmodus voor gefragmenteerde overdracht (stmNone, stmStart, stmContinue, stmFinish). Standaard stmNone, waarmee een volledig zelfstandig bericht wordt verzonden.
aTimeoutconst IntegerMaximale tijd in milliseconden om te wachten op het serverantwoord. Standaard 10000 (10 seconden).

Retourwaarde

Een nieuw toegewezen stream met het binaire bericht ontvangen van de server, of nil wanneer de time-out is verstreken, er geen verbinding beschikbaar was of er een fout is opgetreden. De aanroeper is verantwoordelijk voor het vrijgeven van de geretourneerde stream. (TStream)

Opmerkingen

Deze overload is het binaire equivalent van de tekst de andere overload. Het schrijft de opgegeven stream als een binair frame en blokkeert vervolgens de aanroepende thread op een intern event totdat het volgende binaire bericht van de server arriveert of de timeout verstrijkt. Omdat het blokkeert, vermijdt u het aanroepen vanuit de hoofd-UI-thread met een lange timeout. De retourwaarde is nil wanneer de server niet op tijd antwoordt; uitzonderingen worden onderschept en doorgestuurd naar OnError. Wanneer de client niet is verbonden, of de handshake nog niet is voltooid, retourneert de methode onmiddellijk nil zonder op de time-out te wachten en meldt de fout via OnError met Connection = nil, zoals beschreven voor de tekst-overload. Geef zowel de bronstream (na de aanroep) als de geretourneerde stream vrij wanneer u klaar bent.

Voorbeeld


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;

Terug naar methoden