Ajuda com HTTPServer [desafio! aguardando ajuda.... mas ainda tentando...]

8 respostas
cpsilva

Pessoal fiz um discador VOIP que na verdade ele fica rodando como um serviço no micro do cliente, ao ser passado uma requisição pelo navegador(localhost:60060/comandos) ele retorna com o status da chamada(CHAMANDO ou OCULPADO), porém ele finaliza a requisição, e eu queria segurar mais um pouco e dizer quando o cliente atenndeu…

Não vou postar todo o código, acho que esse já basta…

public Escuta(Socket cliente, Configuracao config, Softphone soft)
			throws IOException {
		this.clienteIn = cliente.getInputStream();
		this.clienteOut = cliente.getOutputStream();
		this.config = config;
		this.soft = soft;
		this.data = new Date();
		this.cliente = cliente;		
	}

.
.
.

DataOutputStream output=null;
	try {
		output = new DataOutputStream(this.clienteOut);
		System.out.println("Enviando para o navegador cliente...");
		saida += "\n"+this.soft.getEventType()+"\n"; // aqui vai dizer CHAMANDO, OCUPADO
		output.write(saida.getBytes()); // aqui faz o print na tela do navegador cliente...


		//aqui já estao minhas tentativas..... queria acrescentar mais informação depois do cliente ja vizualiar a anterior
		Thread.sleep(500);
		saida="Finalizado....";
		output.write(saida.getBytes()); // aqui tento enviar mais informacao...
		//fim da minha tentativa...

		output.close(); // termina o request.....
		// na verdade ele manda tudo de uma vez... 
		} catch (IOException e1) {
		// TODO Auto-generated catch block
			e1.printStackTrace();
		}

Resumindo: quero que o cara veja… CHAMANDO… e depois de um tempo… CHAMADA ATENDIDA.

Obrigado.

8 Respostas

D

Isso está dentro de uma Thread, certo?

cpsilva

Sim, tudo funcionando perfeitamente…

Adelar

Tenta usar

output.flush();

na linha 7 do segundo código.

[]'s

cpsilva

Tentei e não funcionou, parece que o sleep está antes de tudo, pq ele espera um pouco e depois printa tudo de uma vez…

tb tentei com .wait, sem sucesso…

aguardo uma ajuda… mas enquanto isso vou tentando outras formas…

fantomas

Oi cpsilva,

Não estou certo se entendi seu problema, mas mesmo assim vou mandar meu palpite:

Talvez o que esteja ocorrendo seja por causa do ciclo de vida da requisição, ou seja, mesmo que vc pare (sleep) não irá adiantar porque vc estará apenas retardando o termino do ciclo onde a pagina é finalmente construida e disponibilizada ao cliente.

Verifique se é isto mesmo.

flws

cpsilva

Eu acredito que seja isso sim, mas como faco para que a requisição demore mais, e de uma forma que eu possa ir passando informação e o cliente já possa ir recebendo sem eu fechar a conexão, ou seja só fechar quando tudo estiver informado.

fantomas

Oi cpsilva,

Como não sou desenvolvedor web full time tenho um pouco de dificuldade de lhe passar algumas idéias com mais detalhes, mas vamos lá.

1) Talvez utilizando algo relacionado ao AJAX pode resolver.
2) A página poderia ficar executando refresh de tempos em tempos para acessar alguma estrutura associada a sessão para verificar o status do seu processamento.
3) Existem alguns frameworks para jsf com alguns componentes inteligentes, talvez haja um que lhe ajude.
 ...

 Eu tentaria ver alguma coisa com AJAX, a solução poderá ficar mais "enxuta" e menos dependente.

flws

cpsilva

Sim, na verdade a parte que tem web tem tecnologia AJAX, porém o aplicativo java é multiplataforma, pode ser que o usuário final queira usar uma interface em VB ou Delphi, por isso q eu queria fazer tudo pelo java, e fazer com que ele fosse mandando as respostas ao logo de seus acontecimentos, seria uma página com um de delay de processamento de no máximo 10s, o tempo de atender(ou não) uma ligação… é um projeto muito importante para mim, mas a finalização que está empacando.
Bom é isso…

Criado 12 de janeiro de 2011
Ultima resposta 13 de jan. de 2011
Respostas 8
Participantes 4