Jump to content
Sign in to follow this  
Cr4zYPT

Aceder classes de outro thread

Recommended Posts

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,

Edited by Baderous
geshi

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.