Событие прогресса для TAzureBlobService и TAmazonStorageService - PullRequest
3 голосов
/ 23 февраля 2012

При загрузке или загрузке данных в облачные сервисы (используя TAzureBlobService или TAmazonStorageService), похоже, нет никакого способа получить отзыв о ходе загрузки / выгрузки.

Я вижу, что в конечном итоге вызывается TIdTCPClientCustom.Connect, и в этой функции он создает IOHandler по умолчанию для соединения, если оно не существует (и этого не происходит, если не используется SSL). Если бы я мог установить события OnWorkBegin, OnWorkEnd и OnWork для этого IOHandler, то я мог бы отслеживать прогресс, но я не вижу способа сделать это.

Если используется соединение SSL, то создается IOHandler (например, в TAzureBlobService.PrepareRequest), но IOHandler является интерфейсом и не имеет свойств OnWorkBegin и т. Д.

Я думаю, что решение состоит в том, чтобы создать класс, произошедший от TAzureBlobService или TAmazonStorageService, а затем переопределить метод PrepareRequest. В этом я могу получить доступ к экземпляру TCloudHTTP (как он создан в PrepareRequest), и с этого я могу получить доступ к IOHandler. Но как мне создать этот IOHandler (как он определен как интерфейс) и установить события (которые не являются частью этого интерфейса)?

Спасибо

1 Ответ

1 голос
/ 24 февраля 2012

События OnWork выставляются TIdComponent, из которых происходят TIdCustomTCPClient и TIdIOHandler. TIdIOHandler не является интерфейсом.

Внутренне TIdCustomTCPClient подключается к событиям OnWork того, что ему назначено IOHandler. Вы должны назначить свои обработчики событий для событий OnWork, предоставляемых TIdCustomTCPClient, а не TIdIOHandler напрямую. Тогда не имеет значения, какой IOHandler будет назначен во время выполнения.

...