2012-02-23 2 views
3

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

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

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

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

Благодаря

ответ

1

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

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

+0

Спасибо за указатель, я понял это сейчас. В моей функции PrepareRequest замены я просто устанавливаю рабочие события, используя (Result.Peer.GetObject как TIdTCPClientCustom) .OnWorkBegin: = abc, например. Результат PrepareRequest - TCloudHTTP. – Mick