TsgcWebSocketClientMethods › 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로 전달됩니다. 바이너리 페이로드를 보내고 받아야 하는 경우 스트림 오버로드를 사용하십시오.

예제


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로 전달됩니다. 작업을 마치면 소스 스트림(호출 후)과 반환된 스트림을 모두 해제하십시오.

예제


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;

메서드로 돌아가기