Curso de dbExpress e DataSnap - Parte XXIX

Veja neste artigo de Guinther Pauli, o penúltimo capítulo do curso de dbExpress e DataSnap. Acesso exclusivo para Assinantes.

Curso de dbExpress e DataSnap

Parte XXIX – Clientes para aplicações .NET Remoting

Neste artigo veremos como criar a aplicação cliente para o servidor criado na parte anterior deste curso.

Criando a aplicação cliente

Inicie uma nova aplicação Windows Forms e salve todos os arquivos do projeto em uma pasta chamada Client, dando o nome de Client.dpr ao projeto. Coloque no formulário principal três TextBoxes, três Labels, dois Buttons e um ListBox, ajustando-os conforme mostrado na Figura a seguir.

 

 

Figura. Chat: tela principal da aplicação cliente

Precisamos adicionar uma referência no projeto servidor para o Assembly que defina o “contrato” de comunicação entre servidor e cliente. Clique de direita no nome do projeto no Project Manager e escolha Add Reference. Na janela que aparece, vemos na lista superior apenas os Assemblies registrados no GAC. Clique no botão Browse e localiza o PackIntf.dll, selecione-a na lista e clique em OK.

Declare os seguintes namespaces na cláusula uses da sessão interface:

 

System.Runtime.Remoting,

System.Runtime.Remoting.Channels,

System.Runtime.Remoting.Channels.Http,

ChatIntf;

 

Declare os seguintes objetos na sessão public do formulário:

 

cnl: HttpChannel;

ChatServer: IChatServer;

 

No evento Click do botão Conectar digite o seguinte:

 

cnl := HttpChannel.Create;

ChannelServices.RegisterChannel(cnl);

ChatServer := Activator.GetObject(typeOf(IChat),

  System.String.Format('http:///ChatServer',TextBox1.Text)) as IChat;

 

No evento Click do botão Enviar digite o seguinte:

 

var

  msg: ChatMsg;

begin

 if ChatServer = nil then exit;

 msg := ChatMsg.Create;

 msg.Nome := TextBox2.Text;

 msg.Msg := TextBox3.Text;

 ChatServer.EnviaMensagem(Msg);

 

Coloque um Timer no formulário, altere seu Enabled para True, Interval para “1000” (1 segundo) e no seu evento Tick digite:

 

var

  Msgs: ChatMsgs;

  Msg: ChatMsg;

begin

  if ChatServer = nil then exit;

  ListBox1.Items.Clear;

  Msgs := ChatServer.Refresh;

  for Msg in Msgs do

    ListBox1.Items.Insert(0,

      System.String.Format(

      '[] ',[Msg.DataHora.ToString('t'),Msg.Nome,Msg.Msg]));

Testando o Chat

Para testar o chat, executamos primeiro a aplicação servidora e a mantemos ativa. A seguir, basta executar n instâncias da aplicação cliente, indiciando no primero TextBox o nome e porta do servidor remoto. Digite seu nick, clique no botão Conectar e envie mensagens. A Figura a seguir mostra o chat em execução.

 

 

Figura. Um chat usando objetos distribuídos e .NET Remoting

Nota: para facilitar o exemplo e focar o exercício no .NET Remoting, não implementamos algumas funcionalidades básicas como rolagem das mensagens, de forma que a ordem fica de cima para baixo, conforme recebido. Além disso, o método Refresh retorna todas as mensagens a cada n segundos. Uma sugestão é implementar o método para retornar somente as mensagens novas.

 

Download

Leia todos artigos da série

Artigos relacionados