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://{0}/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(
'{0}[{1}] {2}',[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
- Curso de dbExpress e DataSnap
- Curso de dbExpress e DataSnap - Parte II
- Curso de dbExpress e DataSnap - Parte III
- Curso de dbExpress e DataSnap - Parte IV
- Curso de dbExpress e DataSnap - Parte V
- Curso de dbExpress e DataSnap - Parte VI
- Curso de dbExpress e DataSnap - Parte VII
- Curso de dbExpress e DataSnap - Parte VIII
- Curso de dbExpress e DataSnap - Parte IX
- Curso de dbExpress e DataSnap - Parte X
- Curso de dbExpress e DataSnap - Parte XI
- Curso de dbExpress e DataSnap - Parte XII
- Curso de dbExpress e DataSnap - Parte XIII
- Curso de dbExpress e DataSnap - Parte XIV
- Curso de dbExpress e DataSnap - Parte XV
- Curso de dbExpress e DataSnap - Parte XVI
- Curso de dbExpress e DataSnap - Parte XVII
- Curso de dbExpress e DataSnap - Parte XVIII
- Curso de dbExpress e DataSnap - Parte XIX
- Curso de dbExpress e DataSnap - Parte XX
- Curso de dbExpress e DataSnap - Parte XXI
- Curso de dbExpress e DataSnap - Parte XXII
- Curso de dbExpress e DataSnap - Parte XXIII
- Curso de dbExpress e DataSnap - Parte XXIV
- Curso de dbExpress e DataSnap - Parte XXV
- Curso de dbExpress e DataSnap - Parte XXVI
- Curso de dbExpress e DataSnap - Parte XXVII
- Curso de dbExpress e DataSnap - Parte XXVIII
- Curso de dbExpress e DataSnap - Parte XXX