O que é o RemObjects SDK?

O RemObjects SDK é um pacote de componentes que possibilita o envio e recebimento de dados entre duas aplicações em máquinas distintas (Cliente/Servidor) quer estas estejam em uma rede local(intranet) ou externa(extranet).

Estes componentes utilizam os protocolos TCP/IP, HTTP ou UDP para o envio e recebimento de informações.

Não abordaremos como efetuar a instalação dos componentes devido não ser este o foco do artigo.

Exemplo de aplicação Cliente/Servidor com RemObjects

Para o pleno entendimento do assunto abordaremos um exemplo simples onde um Cliente solicita ao servidor o resultado de determinada soma.

Para começar crie uma pasta no local de sua preferência com o nome de Exemplo RemObjects SDK.

Após isto insira duas novas subpastas, uma com o nome de Servidor e outra com o nome de Cliente.

Agora abra seu Delphi e acesse File > New > Other e selecione a categoria RemObjects SDK.

Clique duas vezes sobre o item VCL Standalone e em Project folder navegue até a pasta Exemplo RemObjects SDK\Servidor.

Em Project name digite Servidor e desmarque a opção Also create a matching client application and a project group para que o Delphi não crie automaticamente nossa aplicação cliente e um grupo de projeto.

Agora clique no botão Advanced Project Options e em Service library name digite Biblioteca.

Em Service name digite ServicoCalculadora.

Em Server class selecione a classe TRoSuperTcpServer e clique em Ok nas duas telas que estão sendo exibidas.

Veja que o Delphi já criou um formulário com os componentes que fazem referência as classes que criamos: RoServer(TRoSuperTcpServer) e o RoMessage(TROBinMessage).

Abra a paleta Project Manager e altere o nome da unit para ServidorRemObjectsUn.pas e altere a propriedade Name do formulário para ServidorRemObjectsFrm e salve o projeto.

Compile o projeto.

Veja que foi exibida uma tela para selecionar qual o ancestral (ou de onde o serviço herdará ) para o serviço que criamos.

Existem duas opções:

Simple Object: Criará uma unit com as implementações do serviço criado.

RemObjects SDK Remote Datamodule: Criará um datamodule remoto com as implementações do serviço criado.

Selecione a opção Simple Object e clique em Ok.

Note na pasta onde foi salvo o projeto encontra-se o arquivo Biblioteca.rodl que é responsável por armazenar as configurações dos serviços criados no projeto.

Clique novamente na paleta Project Manager e veja que o Delphi criou três novas units:

  • Biblioteca_Intf: Contém a interface dos serviços registrados;
  • Biblioteca_Invk: Contém a invocação dos métodos existentes nos serviços registrados;
  • ServicoCalculadora_Impl: Contém as implementações do ServicoCalculadora criado anteriormente;
  • Por padrão o serviço criado implementa dois métodos: GetServerTime e o método Sum.

    Para inserirmos nosso método de soma é necessário que alteremos o arquivo Biblioteca.rodl e para isto basta acessar o menu RemObjects SDK > Edit Service Library ou simplesmente usar a tecla de atalho Ctrl + Alt + U.

    Note que dentro de nosso serviço existem os dois métodos descritos acima.

    Realize a remoção destes dois métodos e insira um novo método de nome SomarValores .

    Adicione dois parâmetros a este método, um com o nome de ValorA e o outro de ValorB ambos do tipo Integer.

    Adicione também um resultado do tipo Integer para o método criado.

    Clique no botão Validate para validar o arquivo criado e compile novamente o projeto. (Caso o delphi informe alguns erros de compilação corrija-os e compile novamente)

    Após ter compilado o projeto insira no método SomarValores na unit ServicoCalculadora.Impl a seguinte implementação abaixo e compile novamente o projeto.

    Result := ValorA + ValorB;

    Agora vamos entender melhor a função dos dois componentes inseridos no nosso formulário ServidorRemObjectsFrm.

    RoServer: Este componente é o responsável por efetuar a comunicação entre o servidor e o cliente.

  • A propriedade Active deste componente é modificada no evento OnCreate do formulário, possibilitando que o cliente possa efetuar requisições ao servidor assim que o mesmo for executado.
  • A propriedade Host faz referência ao local onde se encontra o servidor, por padrão ela é definida como localhost.
  • A propriedade Port faz referência a porta a ser utilizada pelo cliente para se conectar ao servidor e que por padrão é 8095.
  • A propriedade Dispatchers faz referência a qual componente de mensagem será utilizado para enviar os dados para o cliente. Por padrão esta já faz referência ao componente ROMessage.
  • RoMessage: Este componente é o responsável por armazenar os dados a serem enviados pelo RoServer para o cliente.

    Após ter implementado os métodos e entendido os componentes no servidor criaremos agora o nosso cliente, portanto feche o projeto e crie uma nova aplicação no Delphi e salve a unit com o nome de RemObjectsClienteUn e o projeto com o nome de RemObjectsCliente na pasta Exemplo RemObjects SDK\Cliente.

    Insira no formulário dois edits, três labels, um bitbtn, um RoBinMessage e um RoSuperTcpChannel.

    Altere a propriedade dos componentes de acordo com o esquema abaixo:

    Componente Propriedade Valor
    Edit1 Name edtValorA
    Edit2 Name edtValorB
    Edit1 Text Edit2 Text
    Label1 Caption Valor A:
    Label2 Caption Valor B:
    Label3 Caption Resultado:
    Bitbtn1 Name btnCalcular
    Bitbtn1 Caption Calcular
    ROBinMessage Name RoMessage
    ROSuperTCPChannel Name RoCanalTcp
    ROSuperTCPChannel Host Localhost
    ROSuperTCPChannel Port Mesma porta definida na aplicação servidora

    Altere a propriedade name do formulário para RemObjectsClienteFrm e deixe-o com o layout semelhante a imagem abaixo:

    Agora adicione ao projeto o projeto Servidor e salve o grupo de projeto com o nome de ExemploRemObjects na pasta Exemplo RemObjects SDK.

    Defina o projeto RemObjectsCliente como projeto principal e adicione a unit Biblioteca_Intf.

    Declare na cláusula uses da RemObjectsClienteUn a unit Biblioteca_Intf.

    Insira uma variável na cláusula private de nome ServicoCalculadora do tipo IServicoCalculadora.

    No evento OnCreate do formulário adicione o código abaixo:

    
    ServicoCalculadora := CoServicoCalculadora.Create(RoMessage, RoCanalTcp);
    

    No evento OnClick do botão btnCalcular adicione o código abaixo:

    
    lblResultado.Caption := Format('Resultado: %d', 
    [ServicoCalculadora.SomarValores (StrToInt(edtValorA.Text), 
    StrToInt(edtValorB.Text))]);
    

    Compile o projeto e execute a aplicação Servidora e logo após a aplicação Cliente e veja o resultado.

    Conclusão

    Você viu neste artigo como criar uma aplicação Cliente\Servidor utilizando o RemObjects SDK.

    Abordamos algumas das propriedades dos componentes ROSuperTCPServer\Client e do componente ROBinMessage.