Compartilhar via


Visão geral do StoServe

Finalidade

O foco principal desse exemplo de código é o uso de serviços de Armazenamento Estruturado, conforme fornecido na implementação de arquivos compostos. O uso das interfaces padrão IStorage e IStream é descrito. O StoServe funciona com o exemplo de código StoClien para ilustrar o uso conjunto do armazenamento de arquivos compostos por cliente e servidor.

Funcionalidade

O exemplo StoServe apresenta o objeto COPaper COM, que representa virtualmente uma folha em branco de papel de desenho.

Objetos COPaper expõem um conjunto de recursos para desenho de forma livre na superfície de papel usando "tinta" de cor e largura especificadas. A funcionalidade é externamente semelhante aos exemplos de tutorial "rabisco" em muitas versões de Microsoft Visual C++. A diferença nos exemplos do StoServe/StoClien é uma arquitetura baseada principalmente na tecnologia COM. Os recursos eletrônicos de papel de desenho de objetos COPaper estão disponíveis para clientes por meio de uma interface IPaper personalizada. O COPaper implementa a interface IPaper . Uma distinção de arquitetura clara é mantida entre o cliente e o servidor. Nenhuma GUI (interface gráfica do usuário) é fornecida pelo COPaper. O design do objeto COPaper depende do cliente para todo o comportamento de GUI. O COPaper encapsula apenas a captura e o armazenamento baseados no servidor dos dados de tinta desenhados.

Os dados de tinta desenhados na superfície COPaper podem ser armazenados e carregados de arquivos compostos. Os métodos IPaper, Save e Load aceitam um ponteiro de interface IStorage . O COPaper usa essa interface IStorage fornecida pelo cliente para armazenar os dados de desenho.

O COPaper é hospedado em um servidor em processo e é disponibilizado publicamente como um componente COM personalizado. Semelhante a outros servidores nesta série de tutoriais, o StoServe é um servidor COM auto-registrador. Ele disponibiliza o tipo de objeto COPaper para clientes como o componente DllPaper usando um registro de CLSID_DllPaper no Registro.

Assim como no servidor CONSERVE anterior, há suporte para recursos de objeto conectáveis no COPaper. A interface IConnectionPointContainer é exposta e um ponto de conexão apropriado é implementado. Nesse contexto, uma interface IPaperSink personalizada de saída é declarada para uso no envio de notificações ao cliente.

As duas interfaces personalizadas IPaper e IPaperSink são declaradas no IPAPER. H localizado no diretório irmão comum \INC. Os GUIDs para as interfaces e objetos são definidos no PAPGUIDS. H localizado nesse mesmo diretório de inclusão comum.

A instalação CThreaded no APPUTIL é usada pelo StoServe para obter segurança de thread, como foi na amostra FRESERVE. Os objetos COPaper são derivados da classe CThreaded e herdam seus métodos OwnThis e UnOwnThis. Esses métodos permitem que apenas um thread de cada vez tenha acesso ao servidor StoServe e a objetos COPaper gerenciados pelo servidor.

Objeto COPaper COM

O objeto COPaper COM é o tipo de objeto único gerenciado por este servidor em processo StoServe . COPaper é construído como um objeto COM conectável com uma implementação da interface IConnectionPointContainer padrão e uma implementação da interface IPaper personalizada. O COPaper expõe a interface IPaper para que os clientes possam executar um pequeno conjunto de operações de papel eletrônico em uma instância do COPaper. As operações essenciais estão iniciando uma sequência de desenho à tinta, desenhando os dados de tinta na superfície de papel virtual COPaper e encerrando a sequência de desenho de tinta. Nesse esquema, supõe-se que o cliente seja um aplicativo gui controlado por um dispositivo de mouse ou tablet. O cliente é responsável por traduzir movimentos do mouse em solicitações para COPaper, o que salva essas solicitações como dados de tinta.

Há dois níveis de economia de dados de tinta no COPaper. O COPaper salva os dados de tinta em uma matriz baseada em RAM que representa o desenho atual e o COPaper salva persistentemente um desenho inteiro em um arquivo composto. Os métodos na interface IPaper executam ambos.

Como o cliente não gerencia os dados de papel desenhados, mas é responsável por renderizá-los como uma imagem na tela, a implementação do IPaper no COPaper deve expor um método que permite que o cliente obtenha os dados de desenho. A tecnologia de objeto conectável no COPaper é usada para essa finalidade. Um ponto de conexão CONNPOINT_PAPERSINK é implementado pelo COPaper para que um cliente possa se conectar ao COPaper para receber os dados de tinta para desenho. O cliente primeiro chama o método IPaper::Redraw no objeto COPaper para solicitar todos os dados de tinta do desenho atual. Em seguida, a implementação do COPaper do Redraw usa a implementação do cliente de IPaperSink para passar os dados para o cliente.

À medida que o usuário desenha interativamente no cliente, ele pinta os dados imediatamente para a tela e também os envia ao COPaper para salvar. Quando o cliente exige que a tela seja repintada, ele chama o método COPaper Redraw . Esse repositório é comum em aplicativos. Por exemplo, o repositório ocorre quando a janela do cliente é sobreposta por outra janela do aplicativo. O cliente tem uma renderização de bitmap da imagem desenhada, mas o bitmap é facilmente perdido e geralmente deve ser repintado. O cliente depende do COPaper no servidor para os dados de tinta necessários para repintamento.

Essa é uma divisão comum de trabalho de cliente/servidor. É especialmente apropriado quando há um requisito para vários clientes compartilharem os dados. O COPaper é codificado para habilitar isso. Ele usa a instalação APPUTIL CThreaded para obter segurança de thread. Um aplicativo que pode explorar esse design é um aplicativo de quadro de comunicações compartilhado, em que vários clientes podem contribuir para um desenho exibido com frequência. O suporte COM para DCOM (Distributed COM) dá suporte a esse tipo de uso de aplicativo de grupo de trabalho em toda a rede. Para obter mais informações, consulte o exemplo anterior do REMCLIEN.

Um uso mais modesto do esquema de cliente/servidor copaper é integrar o comportamento para objetos implementados em aplicativos diferentes no mesmo computador. Nesse caso, os clientes podem ser um contêiner ActiveX em aplicativos separados que compartilham dados gerenciados pelo mesmo objeto. Esses dados podem não ser os dados de desenho de tinta compatíveis com o componente DllPaper. O StoServe pode ser usado como uma estrutura inicial para componentes de programação que gerenciam outros tipos de dados compartilhados.

Informações de suporte

O makefile StoServe registra o componente StoServe DllPaper COM no registro. Esse componente deve ser registrado antes que o StoServe esteja disponível para clientes COM externos como um servidor para esse componente. Esse auto-registro é feito usando o utilitário Register.exe integrado ao exemplo REGISTER. Para criar ou executar o StoServe, primeiro crie o exemplo de código REGISTER.

Para obter mais informações sobre como configurar seu sistema para criar e testar os exemplos de código nesta série de Tutoriais COM, consulte Como criar exemplos. O makefile fornecido (MAKEFILE) é compatível com o Microsoft NMAKE. Para criar um build de depuração, emita o comando NMAKE na janela do prompt de comando.

Para uso conveniente no Microsoft Visual Studio, um arquivo de projeto é fornecido para cada exemplo. Para carregar o projeto para o exemplo StoServe , você pode executar o Visual Studio no prompt de comando no diretório de exemplos da seguinte maneira:

MSDEV STOSERVE. DSP

Você também pode clicar duas vezes no arquivo Stoserve.dsp no Windows Explorer para carregar um projeto de exemplo no Visual Studio. No Visual Studio, você pode procurar as classes C++ da fonte de exemplo e geralmente executar as outras operações edit-compile-debug.

Observação

Como parte do SDK (Platform Software Development Kit), a compilação desses exemplos de dentro do Visual Studio requer a configuração adequada dos caminhos de diretório no Visual Studio. Para obter mais informações, consulte Como criar exemplos.