Ir para o conteúdo
Cr4zYPT

Aceder classes de outro thread

Mensagens Recomendadas

Cr4zYPT

Bons dias,

Eu estou a fazer uma aplicação do tipo cliente-servidor em que uma das funcionalidades é um chat. Utilizador1 envia mensagem para Servidor e este reencaminha para o respetivo Utilizador2.

Codigo de criação dos threads.

	while (listening)
	{
		try
		{
			//eu inicio um thread para cada cliente que se ligue servidor
			new Cliente(serverSocket.accept()).start();
		}
		catch(IOException A)
		{
		   reportError(A.toString()); //reportError função minha
		}
	}

Codigo do Cliente.java

/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/

package sv;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
/**
*
* @author Cr4zYPT
*/
public class Cliente extends Thread {

// The socket used for communication with the client
private Socket socket = null;

/**
 * Class Constructor
 *
 * @param socket	The socket used for communication with the client
 */
public Cliente(Socket socket)
{
	this.socket = socket;
}

/**
 * The method called when the Thread begins execution
 */
@Override
public void run()
{
	String str;
	try {
		// Get I/O ends of the Socket
		PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
		BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
		String inputLine;

		sv_protocol sv = new sv_protocol();
		// Read, process and reply to requests from ONE client
		while ((inputLine = in.readLine()) != null)
		{

			// Process request
			str=sv.process_request(inputLine);

			// Reply
			out.println(str);

			// Break on END message
			if (inputLine.equals("END"))
				break;
		}

		// Close socket connection & exit on final message
		out.close();
		in.close();
		socket.close();

	}
	catch (IOException e)
	{
		WindowSV.w.reportError(e.toString());
	}
}


}

Eu eventualmente vou ter muitos threads, cada thread associado a um cliente. Como é que posso aceder a classe cliente a partir de outro thread. Por exemplo...O servidor recebe mensagem do Utilizador1, como é que ele pode aceder ao thread do Utilizador2 para a enviar para ele?

Obg,

Editado por Baderous
geshi

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

existem muitas maneiras de ir à fonte (sim é um ditado como o todas as ruas vão dar a Roma) ...

o mais simples de fazer seria (talvez) usar o Observer design pattern

crias uma classe que guarda o estado da conversa.

fazes um duplo registo (a classe Cliente deverá ter uma referencia para essa nova classe, assim como a nova classe de todos os clientes) e sempre que um cliente escrever alguma coisas, sinaliza a nova classe de tal que fica responsável de notificar as restantes classes que chegou texto do cliente X


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.