TsgcWebSocketClient › Methods › WriteAndWaitData
Verzendt een tekstbericht en blokkeert de aanroeper totdat de server antwoordt met een tekstbericht of de time-out verstrijkt.
function WriteAndWaitData(const aText: String; const aTimeout: Integer = 10000): string;
| Naam | Type | Beschrijving |
|---|---|---|
aText | const String | De tekstpayload die als WebSocket-tekstframe naar de server wordt verzonden. |
aTimeout | const Integer | Maximale tijd in milliseconden om te wachten op het serverantwoord. Standaard 10000 (10 seconden). |
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)
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.
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;
| Naam | Type | Beschrijving |
|---|---|---|
aStream | const TStream | Bronstream waarvan de inhoud zal worden verzonden als een WebSocket-binair frame. De aanroeper blijft de eigenaar van de stream. |
aSize | const Integer | Optionele 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. |
aStreaming | const TwsStreaming | Streamingmodus voor gefragmenteerde overdracht (stmNone, stmStart, stmContinue, stmFinish). Standaard stmNone, waarmee een volledig zelfstandig bericht wordt verzonden. |
aTimeout | const Integer | Maximale tijd in milliseconden om te wachten op het serverantwoord. Standaard 10000 (10 seconden). |
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)
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.
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;