TsgcWebSocketClientMethods › WriteAndWaitData

WriteAndWaitData メソッド

テキストメッセージを送信し、サーバーがテキストメッセージで応答するか、タイムアウトが経過するまで呼び出し元をブロックします。

オーバーロード

オーバーロード 1

構文

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

パラメータ

名前タイプ説明
aTextconst StringWebSocketテキストフレームとしてサーバーへ送信するテキストペイロードです。
aTimeoutconst Integerサーバーの応答を待機する最大時間(ミリ秒単位)。デフォルトは10000(10秒)。

戻り値

サーバーから受信したテキストメッセージ、またはタイムアウトが切れた場合、接続がなかった場合、エラーが発生した場合は空文字列。(string

解説

WriteAndWaitData は WebSocket を通じたリクエスト/レスポンス方式の交換を行う便利なヘルパーです。テキストフレームを送信してから、次のテキストメッセージがサーバーから届くかタイムアウトが発生するまで、内部イベントで呼び出しスレッドをブロックします。スレッドをブロックするため、短いタイムアウトを使用する場合を除き、メインの UI スレッドから呼び出してはなりません。クライアントが接続されていないか、サーバーが時間内に応答しない場合は空の文字列が返されます。ソケットレベルの例外はトラップされ、OnError に転送されます。バイナリペイロードを送受信する必要がある場合はストリームオーバーロードを使用してください。

使用例


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

オーバーロード 2

構文

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

パラメータ

名前タイプ説明
aStreamconst TStream内容が WebSocket バイナリフレームとして送信されるソースストリーム。呼び出し元はストリームのオーナーのままです。
aSizeconst Integerオプションのフラグメントサイズ (バイト単位)。ゼロより大きい場合、送信ストリームはこのサイズの複数のフラグメントに分割されます。ストリーム全体を単一のフレームとして送信するにはデフォルトの 0 を使用してください。
aStreamingconst TwsStreamingフラグメント化された送信のストリーミングモード(stmNonestmStartstmContinuestmFinish)。デフォルトは stmNone で、完全なスタンドアロンメッセージを送信します。
aTimeoutconst Integerサーバーの応答を待機する最大時間(ミリ秒単位)。デフォルトは10000(10秒)。

戻り値

サーバーから受信したバイナリメッセージを含む新しく割り当てられたストリーム。タイムアウトが切れた場合、利用可能な接続がなかった場合、またはエラーが発生した場合は nil。呼び出し元は返されたストリームを解放する責任があります。(TStream

解説

このオーバーロードはテキストの もう一方のオーバーロード に対応するバイナリ版です。提供されたストリームをバイナリフレームとして書き込み、サーバーから次のバイナリメッセージが到着するかタイムアウトが発生するまで内部イベントで呼び出しスレッドをブロックします。ブロックするため、長いタイムアウトでメイン UI スレッドから呼び出すことは避けてください。クライアントが接続されていない場合またはサーバーが時間内に返信しない場合、戻り値は nil です。例外はトラップされ OnError に転送されます。使用後はソースストリーム(呼び出し後)と返されたストリームの両方を解放してください。

使用例


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;

メソッドに戻る