Indy на самом деле не предназначен для просмотра данных, скорее, вы прочитаете целые данные, позволяя блокировать их до тех пор, пока запрошенные данные не будут получены полностью.
* 1006 Как говорится, у
TIdBuffer
есть метод
PeekByte()
:
function PeekByte(AIndex: Integer): Byte;
var
B: Byte;
if AContext.Connection.IOHandler.InputBuffer.Size > 0 then
begin
B := AContext.Connection.IOHandler.InputBuffer.PeekByte(0);
...
end;
Или, если вы ищете что-то определенное в буфере (ie, разделитель сообщений, et c), TIdBuffer
имеет несколько перегруженных IndexOf()
методов:
function IndexOf(const AByte: Byte; AStartPos: Integer = 0): Integer; overload;
function IndexOf(const ABytes: TIdBytes; AStartPos: Integer = 0): Integer; overload;
function IndexOf(const AString: string; AStartPos: Integer = 0;
AByteEncoding: IIdTextEncoding = nil
{$IFDEF STRING_IS_ANSI}; ASrcEncoding: IIdTextEncoding = nil{$ENDIF}
): Integer; overload;
var
Index: Integer;
Index := AContext.Connection.IOHandler.InputBuffer.IndexOf(SingleByte);
Index := AContext.Connection.IOHandler.InputBuffer.IndexOf(ArrayOfBytes);
Index := AContext.Connection.IOHandler.InputBuffer.IndexOf('string');
...