Controle de Cores usadas - Sugestão

8 respostas
D

Amigos, estou fazendo um chat em servlet.
Quando o usuario acessa, ele seleciona um login e uma cor para as mensagens(igual ao Chat do Terra).
Só que tem uma particularidade:
Assim como o login, uma cor não pode ser usada por 2 pessoas.

Estou conseguindo controlar para que o login não se repita mas não consigo fazer com as cores.
A cor é selecionada através de um “input radio”.
Capturo a cor selecionada através do getParameter.

Alguém tem alguma sugestão?

8 Respostas

J

faz mostrar para o cara selecionar, soh as cores que ainda estão disponíveis =)

cya!

D

Já pensei nissso, mas é necessário saber quais as cores já foram usadas e isto não estou conseguindo.

C

Bom você precisa saber que cor é de quem. Talvez uma opção seria guardar as cores em um ArrayList. Assim que alguem escolher uma cor você remove ela desse ArrayList. E sempre que for mostrar as opções de cores você varre esse ArrayList para mostrar as disponiveis.
É só uma idéia mas talvez não se encaixa a metodologia adotada. Precisaria ver o conceito que você está usando para associar as cores aos logins. O Ideal seria o login ser um Objeto (Usuario) com uma propriedade cor. E caso o usuário saia do chat este devolva a cor para o ArrayList. Se ja não estiver assim veja a possibilidade de incluir isso.

D

Ola caitiff-jVampire
Fiquei um pouco sumido, mas seguinte.
Em relação ao Array foi isso que fiz!
Criei uma classe cor com o codigo:

class Cores  {
public static String[]   vetorCores = new String[30];
public Cores() {
  vetorCores[0] = "#004080";
  vetorCores[1] = "#089079";
  vetorCores[2] = "#34a8b8";
  vetorCores[3] = "#54a082";
  vetorCores[4] = "#698B22";
... } }

Já tenho um objeto do tipo Usuario.
Tenho uma classe chamada Login, onde faço:

public String geraVetores(){ String indice = ""; for (int i = 0;i < length;i++) { if (i == 15) { indice = indice + "</tr> <tr>\n"; } indice = indice + "<td bgcolor=" + cores.vetorCores[i] + ">" + "<input type=radio name=\"Cores\" value=" + cores.vetorCores[i] + "></td>\n"; } return indice; } que serve para mostrar as opções de cores no Código.
Para pegar a cor que o usuário selecionou, faço:

String[] valuesC = req.getParameterValues("Cores");
		   		if (valuesC != null || valuesC == null) {
				  int length = valuesC.length;
  				  for (int i=0; i<length; i++) {
			        Login.fonteCor.set(" <font color=" + valuesC[i] + "> ");
				    Login.fonteCor.get();
			     } // for
				} // if

Fiz então:

for (aux =0;aux < 30 ; aux++)
					{
						if (cores.vetorCores[i] == cores.vetorCores[1])
						{
							cores.vetorCores[1] = "#000000";
						} else {
							if (cores.vetorCores[i] == cores.vetorCores[2])
						{
							cores.vetorCores[2] = "#000000";
						} else {
							return;
						}

						}

para setar outro parametro para a cor selecionada, mas não funcionou!

Pode me dar alguma ajuda ainda?

C

Denisbr, o negócio de setar as cores não funcionou porque você está alterando o array de cores. Dai da confusão mesmo. Ele deveria ser até um final porque é referência para o sistema e por isso não deve ser alterado.
Você vai precisar desenvolver uma maneira de varrer todos os usuários do chat para saber que cores estão sendo usadas. Isso fica mais facil se você tiver um bom conhecimento de interfaces e OO. Procure agrupa-los em um ArrayList e faça uma classe pai para os usuários com as propriedades nick, cor, font etc. Trabalhando com Collections você vai conseguir varrer os usuários com Facilidade. Caso precise de mais ajuda é so pedir.

Outra coisa. Sua classe Login não é bem o que eu disse. O que eu quis dizer é para criar um javabean apenas para guardar valores. Não deve misturar código html de forma nenhuma, e o seu Login está fazendo isso. Esse trabalho precisaria ser atribuido a outra classe.

D

Eu fiz uma interface Usuario, veja:

/** Interface Usuario - Lida com os usuários */
import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.*;
public interface Usuario {
    /* Pega o nome do usuário */
    public  String getNome();
	public String getCores();
	public String getFonte();

	public void setCores(String cor);
    /* Verifica se o usuário está conectado */
    public boolean estaConectado();
    
    /* Verifica se o usuário está ativo */
     public void checaSessao();
     
   /* Desconecta o usuário */
     public void desconecta();
     
   /* Pega resposta */
     public HttpServletResponse getResposta();
  
   /* Seta resposta */
     public void setResposta(HttpServletResponse resposta);
     
   /* Pega a sessão */
     public HttpServletRequest getSessao();
 
   /* Seta a sessão */
     public void setSessao(HttpServletRequest sessao);
     
   /* Pilha de Mensagens 
    * Adiciona mensagem na pilha */  
     public void adicionaMsg(Mensagem msg);
   
     // Espera uma nova mensagem e pega mensagem da pilha
     public Mensagem getNovaMensagem();
     
     // Mostra a mensagem na tela
     public void mostraMensagem(Mensagem msg) throws IOException;
 
    public void addLog(String log) throws IOException;
}

Estou estudando a utilização de ArrayList e estudando o conceito de Collections!!!

C

É bem por aí. :okok:

D

Consegui usando lista remover a cor que usuário forneceu, estou com um pouco de dificuldades para retornar quando o usuário desconecta, mas é só questão de lógica. Obrigado!!!

Criado 13 de julho de 2004
Ultima resposta 28 de jul. de 2004
Respostas 8
Participantes 3