TsgcWebSocketClient › Methods › WriteAndWaitData
テキストメッセージを送信し、サーバーがテキストメッセージで応答するか、タイムアウトが経過するまで呼び出し元をブロックします。
function WriteAndWaitData(const aText: String; const aTimeout: Integer = 10000): string;
| 名前 | タイプ | 説明 |
|---|---|---|
aText | const String | WebSocketテキストフレームとしてサーバーへ送信するテキストペイロードです。 |
aTimeout | const Integer | サーバーの応答を待機する最大時間(ミリ秒単位)。デフォルトは10000(10秒)。 |
サーバーから受信したテキストメッセージ、またはタイムアウトが切れた場合、接続がなかった場合、エラーが発生した場合は空文字列。(string)
WriteAndWaitData は WebSocket を通じたリクエスト/レスポンス方式の交換を行う便利なヘルパーです。テキストフレームを送信してから、次のテキストメッセージがサーバーから届くかタイムアウトが発生するまで、内部イベントで呼び出しスレッドをブロックします。スレッドをブロックするため、短いタイムアウトを使用する場合を除き、メインの UI スレッドから呼び出してはなりません。クライアントが接続されていないか、サーバーが時間内に応答しない場合は空の文字列が返されます。ソケットレベルの例外はトラップされ、OnError に転送されます。バイナリペイロードを送受信する必要がある場合はストリームオーバーロードを使用してください。
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;
| 名前 | タイプ | 説明 |
|---|---|---|
aStream | const TStream | 内容が WebSocket バイナリフレームとして送信されるソースストリーム。呼び出し元はストリームのオーナーのままです。 |
aSize | const Integer | オプションのフラグメントサイズ (バイト単位)。ゼロより大きい場合、送信ストリームはこのサイズの複数のフラグメントに分割されます。ストリーム全体を単一のフレームとして送信するにはデフォルトの 0 を使用してください。 |
aStreaming | const TwsStreaming | フラグメント化された送信のストリーミングモード(stmNone、stmStart、stmContinue、stmFinish)。デフォルトは stmNone で、完全なスタンドアロンメッセージを送信します。 |
aTimeout | const 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;