Arquivos compostos assíncronos

Os Arquivos Compostos Assíncronos, a implementação fornecida pelo sistema de armazenamento assíncrono, permite o download eficiente de arquivos compostos da Internet em geral e da Web em particular. A arquitetura básica dos Arquivos Compostos Assíncronos é mostrada no diagrama a seguir.

arquitetura básica de arquivos compostos assíncronos

A implementação de Arquivos Compostos Assíncronos pode funcionar com novos tipos de moniker assíncronos que entendem os protocolos da Internet e podem se associar a um objeto identificado por uma URL. Esse moniker retornaria um ponteiroIStreamassíncrono ou ponteiro do IStorage da chamada do cliente para IMoniker::BindToStorage.

Os Arquivos Compostos em geral são implementados sobre um objeto de matriz de bytes, uma abstração de um arquivo que representa os dados de um objeto como uma matriz de bytes simples. O objeto de matriz de bytes expõe sua funcionalidade por meio da interfaceILockBytes. Se uma matriz de bytes der suporte ao armazenamento assíncrono não desbloqueado, ela retornará E_PENDING para a implementação de arquivo composto, que, por sua vez, propaga o erro de volta para o chamador.

Para controlar os dados disponíveis durante um download, uma matriz de bytes que dá suporte ao armazenamento assíncrono expõe a interface IFillLockBytes em um objeto wrapper fornecido pelo sistema especificamente para essa finalidade. O código de download fornecido por um moniker assíncrono chama essa interface para preencher a matriz de bytes de forma assíncrona, pois os dados estão disponíveis. O objeto wrapper também expõe uma interface de ILockBytes, que a implementação de Arquivos Compostos Assíncronos usa para ler e gravar dados de e para a matriz.

Objetos de armazenamento e fluxo assíncronos fornecem um ponto de conexão para a interface deIProgressNotify, que é implementada pelo código de download do moniker assíncrono. A implementação de Arquivos Compostos Assíncronos chama IProgressNotify para fornecer ao downloader informações sobre o status da operação de download.