Событие выполнения для 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 (поскольку он определен как интерфейс) и установить события (которые не являются частью этого интерфейса)?

Спасибо


person Mick    schedule 23.02.2012    source источник


Ответы (1)


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

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

person Remy Lebeau    schedule 23.02.2012
comment
Спасибо за подсказку, теперь разобрался. В моей заменяющей функции PrepareRequest я просто устанавливаю рабочие события, используя, например, (Result.Peer.GetObject as TIdTCPClientCustom).OnWorkBegin:=abc. Результатом PrepareRequest является TCloudHTTP. - person Mick; 24.02.2012