TsgcWebSocketClient › Methods › WriteAndWaitData

WriteAndWaitData Method

텍스트 메시지를 보내고 서버가 텍스트 메시지로 응답하거나 시간 초과가 경과할 때까지 호출자를 차단합니다.

Overloads

오버로드 1

구문

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

Parameters

NameType설명
aTextconst StringWebSocket 텍스트 프레임으로 서버에 보낼 텍스트 페이로드입니다.
aTimeoutconst Integer서버 응답을 기다리는 최대 시간(밀리초)입니다. 기본값은 10000(10초)입니다.

반환 값

서버에서 받은 텍스트 메시지이거나, 시간이 초과되었거나, 연결을 사용할 수 없거나, 오류가 발생한 경우 빈 문자열입니다. (string)

설명

WriteAndWaitData는 WebSocket을 통한 요청/응답 스타일 교환을 위한 편의 헬퍼입니다. 텍스트 프레임을 보낸 다음 서버로부터 다음 텍스트 메시지가 도착하거나 시간 초과가 발생할 때까지 내부 이벤트에서 호출 스레드를 블로킹합니다. 블로킹되므로, 짧은 시간 초과를 사용하지 않는 한 메인 UI 스레드에서 호출해서는 안 됩니다. 서버가 제 시간에 응답하지 않으면 빈 문자열이 반환됩니다. 소켓 수준의 예외는 포착되어 OnError로 전달됩니다. 바이너리 페이로드를 보내고 받아야 하는 경우 스트림 오버로드를 사용하십시오.

클라이언트가 연결되지 않았거나 WebSocket 핸드셰이크가 아직 완료되지 않은 경우, WriteAndWaitData는 아무것도 보내지 않고 시간 초과를 기다리는 대신 즉시 빈 문자열을 반환합니다. 실패는 OnError를 통해 Connection = nil과 오류 Data not sent, the client is not connected or its handshake has not completed.(resourcestring S_ERROR_CLIENT_NOT_CONNECTED)로 보고됩니다. 이 이벤트는 메서드가 반환되기 전에 호출 스레드에서 발생하며, LastError에도 동일한 텍스트가 저장됩니다. 호출자에게 예외가 발생하지 않으며 클라이언트도 연결이 끊어지지 않습니다. 이 보고를 건너뛰려면 Options.RaiseDisconnectExceptions를 False로 설정하십시오. 연결이 끊어져 쓰기가 실패했지만 클라이언트가 이미 재연결한 경우에도 실패는 Connection = nil로 보고되므로 새 연결은 그대로 유지됩니다.

예제


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

Overload 2

구문

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

Parameters

NameType설명
aStreamconst TStream내용이 WebSocket 바이너리 프레임으로 전송될 소스 스트림입니다. 호출자는 스트림의 소유자로 남습니다.
aSizeconst Integer선택적 조각 크기(바이트)입니다. 0보다 큰 경우 나가는 스트림이 이 크기의 여러 조각으로 분할됩니다. 전체 스트림을 단일 프레임으로 보내려면 0(기본값)을 사용하십시오.
aStreamingconst TwsStreaming프래그먼트 전송을 위한 스트리밍 모드(stmNone, stmStart, stmContinue, stmFinish)입니다. 기본값은 stmNone으로, 완전한 독립 실행형 메시지를 보냅니다.
aTimeoutconst Integer서버 응답을 기다리는 최대 시간(밀리초)입니다. 기본값은 10000(10초)입니다.

반환 값

서버에서 수신한 바이너리 메시지를 담은 새로 할당된 스트림이거나, 시간 초과가 만료되었거나, 사용 가능한 연결이 없거나, 오류가 발생한 경우 nil입니다. 호출자는 반환된 스트림을 해제할 책임이 있습니다. (TStream)

설명

이 오버로드는 텍스트 다른 오버로드의 바이너리 대응 메서드입니다. 제공된 스트림을 바이너리 프레임으로 기록한 다음, 서버로부터 다음 바이너리 메시지가 도착하거나 시간 초과가 발생할 때까지 내부 이벤트에서 호출 스레드를 차단합니다. 차단되므로 긴 시간 초과로 메인 UI 스레드에서 호출하지 마십시오. 반환 값은 서버가 제때 응답하지 않을 때 nil입니다. 예외는 포착되어 OnError로 전달됩니다. 클라이언트가 연결되지 않았거나 핸드셰이크가 아직 완료되지 않은 경우, 이 메서드는 시간 초과를 기다리지 않고 즉시 nil을 반환하며 텍스트 오버로드에서 설명한 대로 Connection = 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;

메서드로 돌아가기