Categorias
chat javascript visual studio

Criando um Chat em ASP.NET em 1 minuto

Para quem quer ter um chat em seu web site, esse componente ?? uma m??o na roda. Muito f??cil de ser utilizado e configurado, apesar de seus bugs (irei solucion??-los no fim do post). Em poucos segundos voc?? tem um chat funcional! A Web Furbish desenvolveu esse componente e pode ser encontrado tanto aqui quanto aqui e em v??rios mirros pela net. Vamos ao desenvolvimento…
Extraia os arquivos em um local onde poder?? busc??-los. Agora crie um novo Web Site. Se for sua primeira vez usando o componente, primeiramente, deve-se adicionar o novo controle ao ToolBox do Visual Studio. Para isso, clique com o bot??o direito em algum local onde ?? exibido os itens e escolha a op????o Choose Items:

Quando surgir a caixa de sele????o de componentes, na aba .NET Framework Components, clique no bot??o Browse… para selecionar a DLL JaxterChat.dll na pasta onde extraiu os arquivos a princ??pio. Clique em OK para carreg??-la. Ver?? que ela foi adicionada ao ToolBox. Esse passo foi o mais dif??cil! Em seguida copie a pasta JaxterChat (que havia junto ?? DLL) e incorpore-o a seu projeto. Nessa pasta cont??m arquivos de imagem, som, etc. Agora ?? simples: arraste-o para a p??gina para que ele seja adicionado. Pronto! Voc?? j?? tem seu chat
O resto ?? apenas configura????o: tema, tempo de atualiza????o, usar som, nome dos labels, etc. Veja como ficou o meu!

Tranquilo e pr??tico, n??o? Antes dos bugs, vamos a alguns questionamentos?

1) Como fa??o para ter v??rias salas?

Voc?? n??o precisar criar v??rias p??ginas para a cada sala. Basta que, no Page_Load, atribua o nome da sala ao controle. Exemplo: Chat.RoomName = “Blog”; O controle ir?? se encarregar de fazer a separa????o dos usu??rios de acordo com o nome da sala.

2) Como gravar o log das conversas?

Crie um m??todo para o OnMessagePosted do chat. Voc?? pode gravar em banco ou em arquivo. Ficaria mais ou menos assim:

protected void Grava_Log(object sender, WebFurbish.JaxterMessageEventArgs e)
{
      string sala = e.RoomName;
      string usuario = e.UserName;
      string mensagemExibida = e.Message;
      string mensagemHtml = e.MessageHTML;
      string hora = DateTime.Now.ToString(“dd/MM/yyyy HH:mm:ss”);
      // Grava o log em banco ou em arquivo
}
 
3) Como enviar mensagens ??s salas (avisos de administra????o, etc) igual a um Broadcast?
 
Esse ?? um pouco mais complicado e demorado, ent??o irei explicar em linhas gerais como seria:

  • Pegaria todas as sala usando o m??todo GetRoomList();
  • E para cada sala faz-se o envio atrav??s do m??todo SendCustomMessage().

Um exemplo seria: Chat.SendCustomMessage(“Nova not??cia no blog!”, “Administra????o”, “Blog”, false);
O par??metro false indica que essa mensagem n??o ser?? processada em log (ou seja, n??o parass?? pelo m??todo do OnMessagePosted).
 
E n formas que h?? de customizar o chat para trabalhar da forma como desejar. Pois bem, agora vamos aos bugs encontrados. Quando levantei esses bugs enviei um e-mail para eles mas n??o obtive resposta at?? o momento (tamb??m nem tentei mais… :P).

Bug 1: A cada mensagem entrada, a barra de rolagem ao inv??s de acompanhar as mensagens, ela fica sempre apontada para o topo. Ou seja, ela n??o desce…

Notamos isso quando come??a a encher de mensagens. A barra ao inv??s de rolar automaticamente para baixo, fica estagnada no topo. Analisando o JavaScript que ele gera, verifiquei que h?? um problema na fun????o WF_goToBottomScroll. Da??, como n??o posso apagar ela, criei uma outra com o mesmo nome. Como h?? sobrecarga ela ser?? executada tamb??m. ?? armengue, mas ?? uma solu????o. Como funciona essa solu????o? A cada 0 segundos verifico se o foco est?? no campo de texto digitado: se estiver, a barra da div rola automaticamente para baixo. Para que isso funcione, baixe esse script aqui para fazer uma varredura de controles HTML. E adicione o seguinte bloco de c??digo JS na p??gina que cont??m o chat:

window.onload = function() {
    setFocusTracking();
    sizeMsgOut = document.getElementById(‘WF_msgOut’).scrollHeight;
    setTimeout(“WF_goToBottomScroll(‘WF_msgOut’);”, 0);
}


function WF_goToBottomScroll(elemento) {
    var msgOut = document.getElementById(elemento);
    if (document.hasFocus) {
        if (document.hasFocus.id == ‘WF_textInput’)
            msgOut.scrollTop = msgOut.scrollHeight;
    }
    setTimeout(“WF_goToBottomScroll(‘” + elemento + “‘);”, 0);
}

Bug 2: O som n??o funciona!

Quando vi que iria ter som, pensei: “Bala!”. Mas da?? ele exige Java para rodar. Pensei novamente: “Tranquilo! Hoje na net, em sites de banco, tem que ter Java, logo pro chat vai ser pr??-requisito ter tamb??m.”. Instalei a vers??o mais recente e n??o funcionou! Porque, eu n??o sei. Como o componente ?? fechado, a ??nica coisa que deu para ver ?? que ele chama uma classe Java SoundApplet.class j?? compilada. Enfim, providenciei outra solu????o: coloquei a propriedade EnableSound como false e adicionei algumas linhas ao script WF_goToBottomScroll para tocar um som a cada vez que ?? dado uma entrada de mensagem. Esse som ?? puro JavaScript! Primeiro, adicione uma tag de som em background em qualquer local da p??gina, assim:

<BGSOUND id=“sound” src=“”>

Depois crie uma vari??vel global var sizeMsgOut = 0; antes do window.onload . Ou seja, estou criando uma vari??vel global que ir?? armazenar o tamanho de minha div a cada momento e quando entrar na p??gina pela primeira vez ter?? valor 0. Agora, adicione as linhas abaixo na fun????o WF_goToBottomScroll antes do setTimeout:
if (document.getElementById(‘WF_msgOut’).scrollHeight != sizeMsgOut) {
    document.all.sound.src = “JaxterChat/Sounds/alert.au”;
    sizeMsgOut = document.getElementById(‘WF_msgOut’).scrollHeight;
}

A cada itera????o da fun????o, verifico se o tamanho da div que cont??m as mensagens ?? diferente do valor armazenado na vari??vel. Se for ?? porque entrou nova mensagem logo deve tocar o som.

Esses foram dois bugs que encontrei quando estava usando-o. Pode ser que haja outros que n??o encontrei. Se n??o tiver ?? bom, pois ?? um chat bem legalzinho e f??cil e manipular. At?? mais!

25 respostas em “Criando um Chat em ASP.NET em 1 minuto”

Patr??cia,

Sim, pode-se fazer esse atrelamento. No caso voc?? pode criar duas p??ginas: uma para o login e outra para o chat. Na p??gina do login fa??a todo o processo de autentica????o e d?? um redirecionamento para a p??gina do chat. Ent??o, no chat, insira o login como atributo na propriedade UserName do componente do chat, da?? cada usu??rio do chat ser?? associado ao seu respectivo login.

Poss??vel ??, basta que adicione seu script na parte:

if (document.hasFocus.id == 'WF_textInput') {
msgOut.scrollTop = msgOut.scrollHeight;
alert("Passei aqui!");
}

No momento n??o tenho tal script mas basta adicion??-lo nessa sess??o.

Thiago, me ajuda com uma coisa? Por que quando posto alguma coisa fica a frase e um monte de ??? abaixo? E como fa??o para pegar o nome da pessoa?

Abra??os e ??timo blog!

Renan M.

Renan,
Teve outra pessoa que me falou da mesma coisa, contudo n??o consegui simular esse erro. J?? verificou o charset de sua aplica????o? Adicione no cabecalho:

meta http-equiv="Content-Type" content="text/html; charset=utf-8"

E tamb??m verifique o tipo de documento est?? configurado a p??gina:

!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;
html xmlns="http://www.w3.org/1999/xhtml&quot;

E no web.config adicione:
globalization culture="pt-BR"

Obs: tive que remover a tag de sinal maior e menor sen??o n??o iria aparecer.

E para obter o nome da pessoa no chat use o atributo UserName ou AJAX_getActiveUsers para obter o nome de todos os usu??rio da sala.

no browser do chromos, firefox e safari quando digitamos a mensagem e enviamos o corpo da mensagem fica cheio e de caracteres estranhos. Tem como resolver?

o codigo para vb.net 2005, 2008 e 2010

para salva o log ??
Protected Sub Grava_Log(sender As Object, e As WebFurbish.JaxterMessageEventArgs)
Dim sala As String = e.RoomName
Dim usuario As String = e.UserName
Dim mensagemExibida As String = e.Message
Dim mensagemHtml As String = e.MessageHTML
Dim hora As String = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss")
' Grava o log em banco ou em arquivo
End Sub

Ola Galera eu gostaria muito de saber, se vcs sabe me explicar como fasso para mandar, uma mensagem direto numa sala de bate papo, tipo da UOL eu ja criei um projeto. tudo so falta isso, tipo nao quero que passe a mensagem na caixa de texto, do site e sim mande direto Espero resposta …… mais uma coisa eu criei o projeto no visual basic 2008 ok ate ++++

obs. eu quero sabe como manda direto a frase para dentro da sala e nao pase pela caixa de texto…. brigado espero resposta

Thiago Mar??al ….muito oubrigado pela sua aten??ao

mais o que eu quis dizer foi como mando uma mensagem dentro de uma sala de bate papo, tipo da UOL, sem passar pela caixa de texto do site, (obs. o programa e tipo um spammer ok) mais eu nao quero que a frase, que mando no chat passe pela caixa de texto do site, e sim va direto… e meio complicado de explicar mais se voce for neste site : http://hotlinks.gedan.com/downloads.php?ID=2
e ver o tipo de programa, que falo vc vai me entender, tipo ele manda mensagens automaticas para as salas de bate papo, eu ja criei um mais para finalizar falta isso, (mensagem va direto sem pasar pela caixa de texto do site) … espero resposta aguardo, e mais uma vez muito oubrigado pela sua aten??ao.

Entendi o que quis dizer, contudo nunca fiz algo do tipo pois voc?? precisa entender um pouco o mecanismo do outro lado para que fa??a um envio direto (o que s?? um spammer ou hacking poderia entender melhor). Se souber de algo, posto aqui, mas no momento nenhuma id??ia de como fazer isso direto.

Boa noite Thiago, achei muito interessante esse chat, mas a licen??a desse componente ?? gratu??to para uso livre ou comercial? Ele tem prazo para expirar?

Ol?? Thiago, o chat ?? muito legal, mas uma d??vida: toda vez que eu reinicio o visual studio ele perde a refer??ncia da pasta Jaxter, e quando tento trocar o tema, aparece:
Could not find a part of the path 'C:Program FilesMicrosoft Visual Studio 10.0Common7IDEJaxterChatThemes'.
Acredito que isso tamb??m seja um bug, existe algo a se fazer para solucinar? Grato.

Bom Dia!
Estou tentando implementar o JaxterChat no meu projeto por??m quando arrasto o componente na tela, ele exibe a seguinte mensagem:"Required files missing from directory – JaxterChat".
A pasta dele j?? encorporada em meu projeto,e mesmo assim a mensagem aparece no componente.
Se algu??m puder ajudar, eu agrade??o.

Obrigada, Let??cia.

Oi leticia, no inicio tive o mesmo problema. Resolvi assim:
Abra o Windows explorer e cola na barra de endere??o:
C:Program Files (x86)Microsoft Visual Studio 10.0Common7IDE
Copia e cola a pasta la que vai da certo.
Abre o VS2010, arrasta e cola no seu projeto o controle JaxterChat que vai dar

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *