Delphi 2009, Инди 10, TIdTCPServer. OnExecute, как захватить все байты в InputBuffer

Это будет сложно.

Если вы можете декодировать этот QR с помощью считывателя (я пробовал, но не получилось), можно перекодировать его с помощью устройства записи. Но нет никакой гарантии, что писатель будет воссоздавать то же самое, так как возможны разные варианты кодирования.

Если ваша цель на самом деле - иметь возможность декодировать, вы застряли. Расшифровка «вручную» может быть возможной, но она длительная и сложная. Вы также можете рассмотреть возможность перерисовки кода вручную на идеальной сетке и передать его читателю.

6
задан RRUZ 23 April 2011 в 00:48
поделиться

1 ответ

Вы не должны использовать Читаемый () как этот. Попробуйте следующее вместо этого:

procedure TFormMain.IdTCPServerExecute(AContext: TIdContext);
var
  RxBuf: TIdBytes;
begin
  RxBuf := nil;
  with AContext.Connection.IOHandler do
  begin
    CheckForDataOnSource(10);
    if not InputBufferIsEmpty then
    begin
      InputBuffer.ExtractToBytes(RxBuf);
      // process RxBuf as needed...
    end;
  end;
end;

Кроме того:

procedure TFormMain.IdTCPServerExecute(AContext: TIdContext);
var
  RxBufStr: String; // not UTF8String
begin
  with AContext.Connection.IOHandler do
  begin
    CheckForDataOnSource(10);
    if not InputBufferIsEmpty then
    begin
      RxBufStr := InputBuffer.Extract(-1, enUtf8);

      // Alternatively to above, you can set the
      // InputBuffer.Encoding property to enUtf8
      // beforehand, and then call TIdBuffer.Extract()
      // without any parameters.
      //
      // Or, set the IOHandler.DefStringEncoding
      // property to enUtf8 beforehand, and then
      // call TIdIOHandler.InputBufferAsString()

      // process RxBufStr as needed...
    end;
  end;
end;

Что касается TIdSchedulerOfFiber - пакет SuperCore эффективно мертв в это время. Это не работалось на в очень долгое время и не актуально с последней Инди 10 архитектуры. Мы можем попытаться возродить его позднее, но это не находится в наших планах относительно ближайшего будущего.

16
ответ дан 8 December 2019 в 13:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: